在Powershell中替换多行

时间:2016-02-25 20:42:32

标签: powershell

我正在使用此脚本替换文件中的文本(Powershell V.1)

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'"

但是没有用。所以我使用多个批处理文件来替换一行。感谢

1 个答案:

答案 0 :(得分:1)

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

  • original questionbatch-file标记。
  • 最后一个OP的评论表明他想从.bat文件中运行代码。
  • 这些要点是"由我" 解释,因为此问题的最佳解决方案是将所有代码保存在单个Batch .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运行得更快(而且恕我直言也更简单)。