2016-02-25 52 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更好:) –