0

下面的PowerShell腳本:字符串替換跨Windows版本的不同

$srch = '-v\s*(.*?)\s*=\s*%1' 
$repl = "-v `'`$1'` = %1" 
(Get-Content batchfile.bat) -replace $srch, $repl | Set-Content rave.bat 

產生從Windows 8.1的機器這些結果:

sqlcmd -S rave -v 'test me' = %1 -i rave_params.sql -o alert.txt

同樣的腳本生成從Windows 2012服務器這些結果:

sqlcmd -S rave -v test me = %1 -i rave_params.sql -o alert.txt

劇本應該產生結果離開唱歌引用文字。它在Windows 8.1機器上工作正常,但不在Windows Server 2012上。任何想法我可以做什麼來在Windows Server 2012上產生相同的結果?

+1

如果你能提供一個能夠產生輸出結果的例子字符串嗎?是否可能是$ repl字符串中的第二個單引號在引號之前有反引號,而不是在引號之後? – HAL9256

+0

這兩個系統上是否有不同版本的PowerShell? – David

+0

Windows 8.1帶有PowerShell v4,Windows Server 2012(不是R2)和PowerShell v3。此外,您似乎在代碼中存在拼寫錯誤。 '$ repl'中的最後一個反引號在單引號之前*。 –

回答

0

沒有樣本輸入它很難測試,但這是否給你更好的結果?

$srch = '-v\s*(.*?)\s*=\s*%1' 
$repl = @' 
-v '$1' = %1 
'@ 
+0

您的代碼在替換文本方面效果很好。儘管它在寫入新文件之後仍然沒有在** test me **附近提供單引號。我似乎無法得到PowerShell輸出的文本**'測試我'**周圍的TXT單引號。 –

+0

您可以發佈.bat文件的原始文本,以便我可以測試您的數據嗎? – mjolinor

+0

這裏是batchfile.bat的內容 - > ** sqlcmd -S rave -v test me =%1 -i rave_params.sql -o alert.txt **這裏是被替換的文件如何表現狂歡的內容.bat - > ** sqlcmd -S rave -v'test me'=%1 -i rave_params.sql -o alert.txt ** –