2010-02-25 16 views
9

in meinem Skript Ich überprüfe einige Dateien und möchte einen Teil ihres vollständigen Pfades durch eine andere Zeichenfolge ersetzen (unc Pfad der entsprechenden Freigabe).Ersetzen Pfad in Powershell Zeichenfolge

Beispiel:

$fullpath = "D:\mydir\myfile.txt" 
$path = "D:\mydir" 
$share = "\\myserver\myshare" 
write-host ($fullpath -replace $path, $share) 

Die letzte Zeile mir einen Fehler gibt, da ist $ path nicht kein gültiges Muster für reguläre Ausdrücke enthalten.

Wie kann ich die Zeile ändern, damit der Ersetzungsoperator den Inhalt der Variablen $ path als Literal behandelt?

Vielen Dank im Voraus, Kevin

Antwort

23

Verwenden [regex]::Escape() - sehr praktische Methode

$fullpath = "D:\mydir\myfile.txt" 
$path = "D:\mydir" 
$share = "\\myserver\myshare" 
write-host ($fullpath -replace [regex]::Escape($path), $share) 

Sie auch rebase mein Filter verwenden, könnte es zu tun, schauen Powershell: subtract $pwd from $file.Fullname

+0

Thank you so much. Zu einfach :-) – bitfrickler

+0

:) Als ich nicht über diese Methode kwnow war der Code kompliziert (Regex empfindliche Zeichen von Hand). Diese Methode zahlt sich aus;) – stej

9

Die Methode $variable -replace $strFind,$strReplace regex versteht Muster.
Aber die Methode $variable.Replace($strFind,$strReplace) nicht. Also versuche dieses hier.

PS > $fullpath.replace($path,$share) 

\ myserver \ myshare \ myfile.txt