Execute um comando powershell a partir do lote

1

Eu preciso dividir uma linha muito longa em um arquivo de texto (talvez milhares de caracteres) em linhas mais curtas (8184 caracteres) e um .bat não pode lidar com essa tarefa.

No entanto, encontrei uma solução do PowerShell ( aqui ):

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

Isso funciona quando abro a janela do PowerShell e colo a versão ligeiramente ajustada, em que 750 é 8184 e a executo, MAS ao incluí-la no meu .bat assim: ...

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

... não funciona como pretendido e insere ...

'r'n

... após cada caractere 8184 (não consigo formatar isso, sry).

Eu tentei usar:

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"

Mas não consigo fazer funcionar. Qual é o problema aqui?

    
por FatalBulletHit 07.02.2018 / 19:35

1 resposta

2

'r'n é a sequência de escape correta para uma nova linha, mas o problema é que cadeias com aspas simples não fazem a avaliação de seqüência de escape ou interpolação variável que cadeias duplas fazem, portanto a sequência de escape literal terminando em sua saída. Precisamos passar a string para o PowerShell com aspas duplas, o que é um pouco complicado, já que temos que lidar com a interpretação de cmd.exe também. Usando quatro aspas duplas por citação dupla compreendida, o trabalho:

powershell -Command "(gc test.txt) -replace '.{8184}' , """"$&'r'n"""" | sc temp.txt"
    
por 07.02.2018 / 21:05