Выполнить команду powershell из пакета

Выполнить команду powershell из пакета

Мне нужно разбить очень длинную строку в текстовом файле (возможно, сотни тысяч символов) на более короткие строки (8184 символа), и a .batне может справиться с этой задачей.

Однако я нашел решение PowerShell (здесь):

(gc in.txt) -replace ".{750}" , "$&`r`n" | sc out.txt

Это работает, когда я открываю окно PowerShell и вставляю слегка измененную версию, куда 750и 8184выполняю ее, НО когда я включаю ее в свой .batкод, вот так ...:

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt"

... он не работает так, как задумано, и вставляет ...

`r`n

... после каждого 8184-го символа (я не могу отформатировать это строкой, извините).


Я попытался использовать:

powershell -Command "& {(gc test.txt) -replace '.{8184}' , '$&`r`n' | sc temp.txt}"

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&\r\n' | sc temp.txt"

powershell -Command "(gc test.txt) -replace '.{8184}' , '$&VbCrLf' | sc temp.txt"

Но у меня не получается. В чем тут проблема?

решение1

`r`nявляется правильной escape-последовательностью для новой строки, но проблема в том, что строки в одинарных кавычках не выполняют оценку escape-последовательности или интерполяцию переменных, как строки в двойных кавычках, поэтому в вашем выводе оказывается буквальная escape-последовательность. Нам нужно передать строку в PowerShell в двойных кавычках, что довольно сложно, поскольку нам cmd.exeтакже приходится иметь дело с интерпретацией . Использование четырех двойных кавычек на каждую понятную двойную кавычку делает эту работу:

powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&`r`n"""" | sc temp.txt"

Связанный контент