2011-02-25 4 views
3

VS2010에서 빌드가 성공한 후 축소 된 .js 파일에서 간단한 문자열을 대체해야합니다.VS2010 빌드 후 이벤트에서 파일의 문자열을 바꿉니다. Powershell?

그래서 빌드 후 이벤트 창에서 간단한 명령 줄 호출을 실행하려고합니다.

이 예제는 여기에서 : https://blogs.technet.com/b/heyscriptingguy/archive/2008/01/17/how-can-i-use-windows-powershell-to-replace-characters-in-a-text-file.aspx은 결과 .js 파일을 완전히 조정합니다. 뭔가 이상한 점이 있습니다. 축소 된 .js 파일의 이상한 문자를 가로 지르는 것으로 의심됩니다.

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

유닉스에서 한 줄로 할 수있는 것처럼 어떻게하면됩니까?

답변

4

diff 파일을 보는 것이 좋습니다. 더 많은 정보없이, 약간의 정보 :

(GC의 C :

  • Set-Content 당신은이 같은 -replace 연산자를 사용할 수 있습니다
  • 끝에 새로운 빈 줄 (당신을 위해 아마 문제)를 추가합니다 : \ Scripts \ Test.js) -replace 'a', 'b'| sc C : \ Scripts \ 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

+0

그건 지금 피 묻은거야. 감사!! 이제 추가 사항 : $ repl 및 [io.file] 줄을 하나의 줄로 결합 할 수 있습니까? – Aaron

+0

확실한''[io.file] :: WriteAllText ('c : \ scripts \ test.js', (gc C : \ Scripts \ Test.js) -replace 'a', 'b' r'n "))' – stej

관련 문제