使用正则表达式删除多个配置文件中的路径中的一个级别

时间:2011-10-17 15:15:34

标签: regex powershell filepath

我正在编写一个Powershell脚本来纠正包含错误文件路径的许多配置和项目文件。

文件已向上移动一级,例如以下字符串

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

必须成为

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

我试过用替换功能和正则表达式做到这一点,但由于我最多是初学者,我没有找到解决方案。

任何想法如何实现这一目标?

3 个答案:

答案 0 :(得分:0)

您必须提供有关配置如何组织的更多详细信息,但您可以执行以下操作:

$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然后替换文件。

使用正则表达式,您可以执行以下操作:

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

答案 1 :(得分:0)

另一种(但类似的)方式,只是为了展示Powershell的灵活性:

$a= <some path>
$newPath = Join-Path (Get-Item (Split-Path $a)).Parent.Fullname (Split-Path -Leaf $a)

答案 2 :(得分:0)

首先,抱歉:我没有注意到我输入的文字已经格式化,因此没有正确显示路径。但感谢您的所有回复。

我找到的解决方案是:

"gugus..\..\..\..\3rdParty\Noah3;gigus..\..\..\Platform\source\Platform.Launcher;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>" -replace "\.\.\\(?'match'(\.\.\\)+)", "`${match}"