2016-02-29 92 views
0

调用的时候,我有以下PowerShell的命令从PowerShell中直接调用时工作完全正常:替换字符串不工作从CMD

Get-ChildItem -r -include 'AssemblyInfo.cs' ` 
| foreach-object { $a = $_.fullname; (get-content $a) ` 
| foreach-object { $_ -replace '((\[assembly:\sAssemblyVersion\(")(\d\.\d\.\d\.\d)("\)\]))', '$1[assembly:AssemblyInformationalVersion("$3-alpha")]' } ` 
| Out-File $_.fullname } 

然而,从CMD叫(我们Buildservers进程在cmd中运行)时它不会引发错误,但它也简化版,替换字符串如预期(它可以从任何CMD窗口转载):

PowerShell -Command "(Get-ChildItem -r -include 'AssemblyInfo.cs') | foreach-object { $a = $_.fullname; (get-content $a) | foreach-object { $_ -replace '((\[assembly:\sAssemblyVersion\(")(\d\.\d\.\d\.\d)("\)\]))', '$1[assembly:AssemblyInformationalVersion("$3-alpha")]' } | Out-File $_.fullname }" 

我逃脱引号的标志尝试四周,命令中使用and &`但它没有帮助。

我错过了什么?

回答

2

你有你的命令字符串中的双引号:

... -replace '((\[assembly:\sAssemblyVersion\(")(\d\.\d\.\d\.\d)("\)\]))', ... 
              ^    ^

这些必须进行转义为CMD:

... -replace '((\[assembly:\sAssemblyVersion\(\")(\d\.\d\.\d\.\d)(\"\)\]))', ... 
               ^^     ^^ 
+0

谢谢你,伙计! – nozzleman