none
Pfadangabe in einer Datei ersetzen RRS feed

  • 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

    Mittwoch, 7. November 2018 08:17

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''


    • Bearbeitet BOfH-666 Mittwoch, 7. November 2018 08:28
    • Als Antwort markiert NBC2009 Mittwoch, 7. November 2018 08:47
    Mittwoch, 7. November 2018 08:27

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''


    • Bearbeitet BOfH-666 Mittwoch, 7. November 2018 08:28
    • Als Antwort markiert NBC2009 Mittwoch, 7. November 2018 08:47
    Mittwoch, 7. November 2018 08:27
  • Super, vielen Dank.

    IT Berater

    Mittwoch, 7. November 2018 08:47
  • 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

    Mittwoch, 7. November 2018 18:07
  • 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''

    Donnerstag, 8. November 2018 00:01
  • cmd-lets

    Chris

    Donnerstag, 8. November 2018 08:05