Powershell:正则表达式无效

时间:2012-07-06 21:18:34

标签: powershell file-io windows-xp

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\\" } |

有什么想法吗?

3 个答案:

答案 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