2016-05-03 7 views
7

Ich verwende -replace, um einen Pfad von der Quelle zum Ziel zu ändern. Ich bin mir jedoch nicht sicher, wie ich mit dem \ Zeichen umgehen soll. Zum Beispiel:Wie behandelt man Backslash-Zeichen in PowerShell - ersetzen Sie String-Operationen?

$source = "\\somedir" 
$dest = "\\anotherdir" 

$test = "\\somedir\somefile" 

$destfile = $test -replace $source, $dest 

Nach dieser Operation wird $ destfile auf

gesetzt
"\\\anotherdir\somefile" 

Was ist der richtige Weg, dies zu tun, um die dreifache Backslash im Ergebnis zu vermeiden?

Antwort

11

Versuchen Sie Folgendes:

$source = "\\\\somedir" 

Sie nur 1 Backslash lagen, wurden beim Ersetzen, mit dem Sie die drei \\\ von Ihrem Weg zu Beginn gab.

Der Backslash ist ein regex Escape-Zeichen so \\ wird als, Spiel nur eine \ und nicht zwei \\ zu sehen. Der erste Backslash ist das Escape-Zeichen und wird nicht zur Übereinstimmung verwendet.

Eine weitere Möglichkeit, mit Backslashes umzugehen, ist die regex Escape-Funktion.

+1

'[regex] :: Escape()' ist die sicherere Lösung, weil es auch andere Sonderzeichen (wie '+' oder Klammern) behandelt. –

+0

Danke, das hat funktioniert, obwohl ich die Regex-Lösung verwendet habe – user175562

+0

'' '[regex] :: Escape()' '' funktioniert nicht wie erwartet für Pfade mit '.' –