从this发布,我设法在Windows XP上用Powershell替换目录子文件中的字符串。
foreach ($f in gci -r -include "*.bat")
{ (gc $f.fullname) |
foreach { $_ -replace "D:","C:\path" } |
sc $f.fullname
}
不幸的是,一些例外情况需要“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\\" } |
有什么想法吗?
答案 0 :(得分:3)
用于重新安装将“C:\ path \”替换为“C:\\ path \\”
使用
$_ -replace "c:\\path\\\\","c:\\path\\"
匹配模式是正则表达式,'\'需要使用'\'进行转义。 替换字符串只是一个字符串,不需要转义字符
答案 1 :(得分:0)
只是详细说明CB所说的,当在字符串中替换“\”时,你必须在字符串的“find”部分中将它们转义。最简单的方法如下
$escapedPath = $path -replace "\\","\\"
或澄清:
$escapedPath = $path -replace [RegEx]"\\",[String]"\\"
因为-replace中的第一个参数是RegEx,所以它以不同的方式处理“\”,而后半部分是String数据类型。
答案 2 :(得分:0)
您也可以use the Replace() method of the string class:
PS> $folder = "C:\FolderName\NextFolder\ThirdFolder" PS> $newfolder = $folder.Replace("C:\FolderName\", "D:\") PS> $newfolder D:\NextFolder\ThirdFolder