从this发布中,我设法在Windows XP上用Powershell替换目录的子文件中的字符串。
foreach ($f in gci -r -include "*.bat")
{ (gc $f.fullname) |
foreach { $_ -replace "D:","C:\path" } |
sc $f.fullname
}
不幸的是,一些异常(exception)情况需要使用“C:\\”而不是“C:\”。
我试图使用以下命令解决此问题(将“C:\ path \\”替换为“C:\\ path \\”),但失败:
foreach ($f in gci -r -include "*.bat")
{ (gc $f.fullname) |
foreach { $_ -replace "C\path\\","C:\\path\\" } |
sc $f.fullname
}
错误是:
Invalid regular expression pattern: C:\path\\
为了避免该问题,我尝试了几种变体,但是都产生了相同的错误(替换上面的第3行):
foreach { $_ -replace "C:\path\\\\","C:\\path\\" } |
foreach { $_ -replace 'C:\path\\',"C:\\path\\" } |
foreach { $_ -replace "`C:\path\\","C:\\path\\" } |
foreach { $_ -replace 'C:\path\\\\',"C:\\path\\" } |
有什么想法吗?
最佳答案
对于重新规划,将“C:\ path \”替换为“C:\\ path \\”
使用
$_ -replace "c:\\path\\\\","c:\\path\\"
Match模式是正则表达式,并且'\'需要以'\'进行转义。
替换字符串只是一个字符串,不需要转义字符
关于powershell - Powershell:无效的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369768/