2011-02-25 27 views
3

在VS2010中成功構建後,我需要在縮小的.js文件中替換簡單的字符串。VS2010 Post-build事件,替換文件中的字符串。電源外殼?

所以我試圖運行從生成後事件窗口,一個簡單的命令行調用。

這個例子,從這裏開始:https://blogs.technet.com/b/heyscriptingguy/archive/2008/01/17/how-can-i-use-windows-powershell-to-replace-characters-in-a-text-file.aspx完全mangulates生成的.js文件。有些東西是錯誤的,我懷疑它正在我的縮小的.js文件中遇到一些奇怪的字符,它會將它擰緊。

(Get-Content C:\Scripts\Test.js) | 
Foreach-Object {$_ -replace "// Old JS comment", "// New JS comment"} | 
Set-Content C:\Scripts\Test.js 

我該如何實現這樣一個簡單的任務,就像我可以在unix中做到的一樣?..?

回答

4

這將是非常高興看到的差異文件。沒有更多的信息,一些信息:

  • Set-Content增加了在最後一個新的空行(可能不是對你的問題)
  • 您可以使用-replace操作是這樣的:

    (GC C: \ Scripts \ Test.js) - 替換'a','b'| SC C:\腳本\陣列上Test.js

    -replace作品了。

  • 你可以讀通過[io.file]::ReadAllText('c:\scripts\test.js') and use -replace`的內容,但同樣,我不認爲會有顯著差異。

編輯:評估字符串時

雙引號。例如:

$r = 'x' 
$a = 'test' 
'beg',1,2,"3x",'4xfour','last' -replace "1|$r","$a" 

beg 
test 
2 
3test 
4testfour 
anything 

要保存沒有結束新行的內容,只需使用[io.file]::WriteAllText

$repl = (gc C:\Scripts\Test.js) -replace 'a','b' -join "`r`n" 
[io.file]::WriteAllText('c:\scripts\test.js', $repl) 
+0

感謝您的幫助。到達那裏。單引號阻止了文件被修剪!好極了。有什麼辦法可以防止在文件末尾創建惱人的空白鏈接? – Aaron 2011-02-25 11:25:06

+0

那真是血腥到達那裏。謝謝!!現在加分:$ repl和[io.file]行可以組合成一行嗎? – Aaron 2011-02-25 11:44:36

+0

當然:)'[io.file] :: WriteAllText( 'C:\腳本\ test.js',((GC C:\腳本\ Test.js)-replace 'A', 'B' -join「' r'n「))' – stej 2011-02-25 11:50:43