2010-02-25 24 views
9

nel mio script controllo alcuni file e vorrei sostituire una parte del loro percorso completo con un'altra stringa (percorso unc della condivisione corrispondente).Sostituisci percorso nella stringa PowerShell

Esempio:

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

L'ultima riga mi dà un errore dal momento che $ percorso non non contiene un modello valido per le espressioni regolari.

Come posso modificare la linea per fare in modo che l'operatore di sostituzione gestisca il contenuto della variabile $ percorso come letterale?

Grazie in anticipo, Kevin

risposta

23

Usa [regex]::Escape() - metodo molto utile

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

Si potrebbe anche utilizzare il mio filtro rebase per farlo, guarda Powershell: subtract $pwd from $file.Fullname

+0

\ Grazie mille. Troppo facile :-) – bitfrickler

+0

:) Quando non mi sono reso conto di questo metodo, il codice era complicato (sfuggendo manualmente ai caratteri sensibili alle espressioni regolari). Questo metodo paga;) – stej

9

Il metodo $variable -replace $strFind,$strReplace capisce regex modelli.
Ma il metodo $variable.Replace($strFind,$strReplace) no. Quindi prova questo.

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

myserver \ condivisione \ myfile.txt

Problemi correlati