2010-02-25 5 views
9

Dans mon script, je vérifie certains fichiers et je voudrais remplacer une partie de leur chemin complet par une autre chaîne (chemin non du partage correspondant).Remplacer le chemin dans la chaîne Powershell

Exemple:

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

La dernière ligne me donne une erreur car chemin $ ne contient pas un motif valable pour les expressions régulières.

Comment puis-je modifier la ligne pour que l'opérateur de remplacement gère le contenu de la variable $ path en tant que littéral?

Merci à l'avance, Kevin

Répondre

23

Utilisez [regex]::Escape() - méthode très pratique

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

Vous pouvez également utiliser mon filtre rebase pour le faire, regardez Powershell: subtract $pwd from $file.Fullname

+0

Merci beaucoup. Trop facile :-) – bitfrickler

+0

:) Quand je ne connaissais pas cette méthode, le code était compliqué (échapper les caractères sensibles à la regex à la main). Cette méthode est payante;) – stej

9

La méthode $variable -replace $strFind,$strReplace comprend regex modèles Mais la méthode $variable.Replace($strFind,$strReplace) ne le fait pas. Alors essayez celui-ci.

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

\ myserver \ myshare \ myfile.txt

Questions connexes