VS2010 Событие после сборки, замена строки в файле.Powershell? - PullRequest
3 голосов
/ 25 февраля 2011

Мне нужно заменить простую строку в минимизированном файле .js после успешной сборки в VS2010.

Итак, я пытаюсь запустить простой вызов командной строки из окна событий после сборки.

Этот пример отсюда: 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

Как я могу выполнить такую ​​простую задачу, как в Unix, в одну строку? ..

1 Ответ

4 голосов
/ 25 февраля 2011

Было бы здорово увидеть файл diff.Без дополнительной информации, немного информации:

  • Set-Content добавляет новую пустую строку в конце (вероятно, не проблема для вас)
  • Вы можете использовать -replaceтакой оператор:

    (gc C: \ 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...