我正在尝试使用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_FILE
为C:\Temp\this+that.txt
,BASE_NAME
为this+that
任何人都可以帮助我解释为什么这不适用于包含加号+
的文件名吗?
答案 0 :(得分:2)
@ma_il是完全正确的。 ' +'字符是RegEx中的特殊字符,因此您需要将其转义。
powershell -Command "(gc '!CURRENT_FILE!') -replace [regex]::escape('/!BASE_NAME!/'), '/' | Set-Content '!CURRENT_FILE!'"