2012-08-10 237 views
0

我很少新的PowerShell,但我试图替换.xml文件中的某些字符。看起来我已经陷入了第一步。powershell替换特殊字符

例如我会尝试更换:

<?xml version="1.0"?> 

<?xml version="2.0"?> 

下面你会发现我写到目前为止代码:

Get-Childitem "C:\Users\jp\Desktop\Test" | ForEach-Object { 

     $Content = Get-Content $_.fullname 
     $Content = ForEach-Object { $Content -replace "(<?xml version=`"1.0`"?>)","(<?xml version=`"2.0`"?>)" } 

     Set-Content $_.fullname $Content -Force 

     } 

的问题是,这仅仅是开始我必须更换的琴弦。有没有办法在一定范围内替换任何独立于内部字符的文本?

我不知道如何替换一个完整的字符串,无论我内部有什么特殊字符。 在此先感谢。

回答

0

嗨有很多方法来做正则表达式匹配,你可以简单地将你的代码改变为下面的代码。

\正好逃脱了特殊的正则表达式使得匹配部分起作用。

Get-Childitem "c:\dump\xml" | ForEach-Object { 

     $Content = Get-Content $_.fullname 
     $Content = ForEach-Object { $Content -replace '(<\?xml version="1\.0"\?>)','<?xml version="2.0"?>' } 

     Set-Content $_.fullname $Content -Force 

     } 
1

使用Escape方法在运行时转义特殊字符。你不需要逃避替换模式:

(Get-Content c:\dump\xml) | 
ForEach-Object {$_ -replace [regex]::Escape('<?xml version="1.0"?>'),'<?xml version="2.0"?>'} | 
Set-Content c:\dump\xml 
+1

这很酷,这就是为什么我喜欢这个地方,人们在同一时间帮助和学习。 – justinf 2012-08-11 11:39:36