удалить один уровень в путях в нескольких файлах конфигурации, используя регулярные выражения - PullRequest
2 голосов
/ 17 октября 2011

Я пишу скрипт Powershell для исправления большого количества файлов конфигурации и проектов, содержащих неправильные пути к файлам.

Файлы были перемещены на один уровень вверх, например, следующая строка

"$(ProjectDir)..\..\..\..\bin\; $(ProjectDir)..\..\..\source\"

должно стать

"$ (ProjectDir)..\..\..\bin\; $(ProjectDir)..\..\source\"

Я пытался сделать это с помощью функции замены и регулярного выражения, но так как я новичоксамое большее, я не нашел решения.

Есть идеи, как этого добиться?

Ответы [ 3 ]

0 голосов
/ 17 октября 2011

Другой (но похожий) способ, просто чтобы показать гибкость Powershell:

$a= <some path>
$newPath = Join-Path (Get-Item (Split-Path $a)).Parent.Fullname (Split-Path -Leaf $a)
0 голосов
/ 18 октября 2011

Прежде всего, извините: я не заметил, что введенный мною текст был отформатирован и, следовательно, пути не отображались для вас правильно. однако спасибо за все ваши ответы.

Решение, которое я нашел:

"gugus..\..\..\..\3rdParty\Noah3;gigus..\..\..\Platform\source\Platform.Launcher;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>" -replace "\.\.\\(?'match'(\.\.\\)+)", "`${match}"
0 голосов
/ 17 октября 2011

Вам нужно будет предоставить более подробную информацию о том, как организован ваш конфиг и тому подобное, но вы можете сделать что-то вроде этого:

$a="C:\users\manojs\desktop\bin"

$leaf = split-path $a -leaf
$root = split-path (split-path $a)
$newPath = Join-Path $root $leaf  #will give c:\users\manojs\bin

$a можно получить, прочитав строку и т. Д. Еслипути находятся на одной линии, используйте ; для разделения.Создайте обратно $newa и затем замените его в файле.

С помощью regex вы можете сделать что-то вроде:

$a -replace "\\[^\\]*?\\bin","\bin"
...