2016-02-25 64 views
1

多行我使用这个脚本来替换在一个文件中(Powershell的第1节)替换Powershell的

powershell -Command "(gc 'file.jnlp') -replace 'ruta_logo','logo/logo.png' 
| out-file 'file2.jnlp'" 

但文本,如果我想更换倍数行我怎样才能使脚本?我在想这样的事情:

powershell -Command "(gc 'file.jnlp') -replace 'ruta_logo','logo/logo.png' 
-replace 'ruta_xsl','logo/xsl.xsl' ` 
-replace 'url_msg','url+msg'` 
-replace 'url_forest','url+forest'` 
-replace 'nombre_entidad','Nombre'` 
-replace 'url_word','Word.exe' | out-file 'file2.jnlp'" 

但是不工作。所以我使用多个批处理文件来替换一行。由于

+5

您错过了第一行结尾处的反引号。此外,如果您想要使用PowerShell,请从.ps1文件运行PowerShell代码,而不是将其作为命令字符串传递给'powershell.exe'。如果这不能解决问题,则需要更详细地描述“不工作”。示例输入以及预期输出和实际输出总是有帮助的。 –

+1

此外,Out-File可能会出现编码问题,因此您可能需要使用'-Encoding Ascii'作为示例。 _但不是working_不能帮助我们确定你的问题。 – Matt

+0

您是否正在认真使用PowerShell v1.0?你运行'Get-Host'时看到了什么?甚至不知道'Get-Host'是否可用。 – Matt

回答

1

我决定后由于以下原因,此批处理文件的解决方案:

  • original questionbatch-file标签。
  • 上一个OP的注释表明他想从.bat文件运行代码。
  • 这些点是“由我解释”作为此问题的最佳解决方案是将所有代码保存在一个批处理.bat文件中。

@if (@CodeSection == @Batch) @then 

@echo off 
cscript //nologo //E:JScript "%~F0" <file.jnlp> file2.jnlp 
goto :EOF 

@end 

// JScript section 

WScript.Stdout.Write(WScript.Stdin.ReadAll().replace(
     /(ruta_logo)|(ruta_xsl)|(url_msg)|(url_forest)|(nombre_entidad)|(url_word)/g, 
function (o,A,B,C,D,E,F) 
{return ["logo/logo.png","logo/xsl.xsl","url+msg","url+forest","Nombre","Word.exe"] 
     [[].concat(A,B,C,D,E,F).join().indexOf(o)] })); 

作为一个额外的好处,这个解决方案应该跑得比PowerShell的一个更快(恕我直言,这是也比较简单)。

+1

谢谢。它的工作,并比PowerShell更好:) –