1

Мне нужно разбить очень длинную строку в текстовом файле (может быть, сотни тысяч символов) на более короткие строки (8184 символа), и .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 ответ1

2

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .