2017-01-16 4 views
0

Я пытаюсь заменить строку, включающую разрыв строки в файле. Для этого я использую командную строку.Команда Powershell из cmd не заменяет разрывы строк

Я пытаюсь использовать ту же команду в оболочке CMD и в PowerShell, но я могу только заставить ее работать в последнем.

Вот команда:

powershell -Command "(Get-Content client.properties -Raw).Replace('#test`r`n','test`r`n') | Set-Content client2.properties" 

Почему это не работает в оболочке CMD, и как я могу заставить его работать?

+0

ли вы работать буквально ту же самую команду в обеих оболочках, или CMD эквивалент команды Powershell? – gms0ulman

+0

Уточняйте проблему более подробно. Вы пишете, что он работает в powershell, а не в линии cmd. Вы должны использовать обычную командную строку WIN? – Moerwald

+0

Ive запускает точно такую ​​же команду. Ive открыла CMD-оболочку и запустила ее, а также попыталась запустить ее в файле bat. Когда я открываю Powershell и запускаю команду, он работает. Im работает с Win 10. – TinMan

ответ

2

Управляющая последовательность `r`n не будет работать внутри одиночных кавычек.

Используйте оператор -replace вместо этого и использовать регулярное выражение ускользает:

powershell -Command "(Get-Content client.properties -Raw)-replace('#test\r?\n','test'+$([Environment]::NewLine)) | Set-Content client2.properties" 
+0

Спасибо, разрыв строки теперь распознан правильно. Но добавление разрыва строки не работает. Он просто вставляет «test \ r? \ N» в качестве строки. Есть идеи? – TinMan

+0

@ Хенна да, мой плохой, обновленный ответ –

+0

Были почти там. Теперь я получаю RuntimeException «-ireplace» разрешает только 2 элемента, а не 3. Если я использую только «$ ([Environment] :: NewLine)», это работает, поэтому каким-то образом конкатенация теста и linebreak неверна. – TinMan

Смежные вопросы