使用PowerShell替换字符串中包含+的字符串

时间:2017-05-24 18:30:37

标签: powershell

我正在尝试使用PowerShell做一个简单的查找和替换。基本上,我曾经在一个名为" master"的目录中有一些支持文件。文件。不再需要其中一个支持文件。 "主人" file具有对另一个文件的路径的文本引用。我想要做的是在" master"中修改这条路径。文件删除已删除的目录。

例如,我们说我的文件C:\Temp\this+that.txt我曾经C:\Temp\this+that\this+that.dat,现已转移到C:\Temp\this+that.dat

C:\Temp\this+that.txt有这样的一行:

/temp/this+that/this+that.dat

我希望这一行成为:

/temp/this+that.dat

我有很多这些文件正在移动批处理文件。对于不包含加号+符号的所有文件名,使用下面的powershell命令一切正常。对于这些文件,以下调用不起作用。

powershell -Command "(gc '!CURRENT_FILE!') -replace '/!BASE_NAME!/', '/' | Set-Content '!CURRENT_FILE!'"

对于上面的示例,CURRENT_FILEC:\Temp\this+that.txtBASE_NAMEthis+that

任何人都可以帮助我解释为什么这不适用于包含加号+的文件名吗?

1 个答案:

答案 0 :(得分:2)

@ma_il是完全正确的。 ' +'字符是RegEx中的特殊字符,因此您需要将其转义。

powershell -Command "(gc '!CURRENT_FILE!') -replace [regex]::escape('/!BASE_NAME!/'), '/' | Set-Content '!CURRENT_FILE!'"