Заменить путь в строке Powershell - PullRequest
10 голосов
/ 25 февраля 2010

в моем скрипте я проверяю некоторые файлы и хотел бы заменить часть их полного пути другой строкой (unc path of соответствующей общей папки).

Пример:

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

В последней строке выдается ошибка, поскольку $ path не содержит допустимого шаблона для регулярных выражений.

Как изменить строку, чтобы оператор замены обрабатывал содержимое переменной $ path как литерал?

Спасибо заранее, Kevin

Ответы [ 2 ]

26 голосов
/ 25 февраля 2010

Использование [regex]::Escape() - очень удобный метод

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

Вы также можете использовать мой фильтр rebase для этого, посмотрите на Powershell: вычтите $ pwd из $ file.Fullname

11 голосов
/ 03 марта 2010

Метод $variable -replace $strFind,$strReplace понимает регулярные выражения.
Но метод $variable.Replace($strFind,$strReplace) не делает. Так что попробуйте это.

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

\ MyServer \ MyShare \ myfile.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...