Benutzer mit den meisten Antworten
Pfadangabe in einer Datei ersetzen

Frage
-
Hallo,
ich möchte gerne in einer Datei eine Pfadangabe suchen und durch eine andere ersetzen. Leider ist das Ergebnis noch nicht ganz so wie ich es mir wünsche. Kann mir jemand sagen was ich falsch mache?
$_NotesINI = "C:\Temp\Notes.ini" $PathOld = 'C:\Lotus\Notes' $PathOld = [regex]::escape($PathOld) $PathNew = 'C:\Progra~2\Lotus\Notes' $PathNew = [regex]::escape($PathNew) (Get-Content $_NotesINI) | Foreach-Object {$_ -replace $PathOld, $PathNew} | Set-Content "C:\Temp\NotesNeu.ini"
Vorher sieht es so aus:
Directory=C:\Lotus\Notes\Data
NotesProgram=C:\Lotus\Notes\---------------------------------------------------
Nachher
Directory=C:\\Progra~2\\Lotus\\Notes\Data
NotesProgram=C:\\Progra~2\\Lotus\\Notes\---------------------------------------------------
Wieso sind plötzlich 2 Backslash an stellen wo nur einer sein sollte?
Liebe Grüße
Norbert
IT Berater
Antworten
-
Beim Suchen mit regulären Ausdrücken muss man spezielle Zeichen mittels Escape-Zeichen "maskieren". Das gilt aber wirklich nur für's Suchen. Die Zeichenfolge mit der Du das gesuchte ersetzen möchtest wird "direkt" angegeben - so, wie sie wirklich aussehen soll. Du müsstest also bei $PathNew einfach den gewünschten Pfad angeben - ohne [REGEX]::ESCAPE - Trickserei. ;-)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
Alle Antworten
-
Beim Suchen mit regulären Ausdrücken muss man spezielle Zeichen mittels Escape-Zeichen "maskieren". Das gilt aber wirklich nur für's Suchen. Die Zeichenfolge mit der Du das gesuchte ersetzen möchtest wird "direkt" angegeben - so, wie sie wirklich aussehen soll. Du müsstest also bei $PathNew einfach den gewünschten Pfad angeben - ohne [REGEX]::ESCAPE - Trickserei. ;-)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
-
hi,
das könnte dich event. auch noch interessieren. Es gibt ein interessantes cmd-lebt für Pfade. Den neuen Pfad kannst du ja einfach ergänzen
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/split-path?view=powershell-6
PS C:\> Split-Path -Path "C:\Test\Logs\*.log" -Leaf -Resolve Pass1.log Pass2.log ...
Chris
-
Ohne übermäßig pingelig sein zu wollen .... aber die Dinger heißen cmdlets!! ;-)
Davon unabhängig: Wie soll Split-Path in diesem Fall helfen und wie soll ein Anfänger mit diesem schlecht formatierten Code etwas anfangen können?
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''