Posso passar uma nova linha em um parâmetro de linha de comando para um executável do Windows em um arquivo em lotes?

1

Digamos que eu tenha um arquivo executável para o qual desejo passar um parâmetro de um arquivo .bat . O problema é que o valor do parâmetro deve ter um newline .

Quando eu tento o seguinte:

"c:\folder\my app.exe" parameter="line1\nline2"

o resultado não é interpretado como tendo uma nova linha entre line1 e line2 .

Alguma idéia de como fazer isso?

    
por c00000fd 24.08.2017 / 02:41

2 respostas

1

Não, não via o próprio arquivo em lotes. Mas arquivos exe ou outros programas podem passar argumentos contendo novas linhas para outros arquivos Exe.

Portanto, a sua solução aqui é criar uma ferramenta trivial analisando seus argumentos que você chamará como

runner "c:\folder\my app.exe" parameter="line1\nline2"

e substituirá \n por verdadeiro caractere LF (aqui mostrado como ) e executará a chamada usando P / Invoke:

"c:\folder\my app.exe" parameter="line1↵line2"

Outra maneira de superar essa limitação é usar o PowerShell. Tem análise de linha de comando diferente.

    
por 24.08.2017 / 05:50
0

Não pode ser feito.

Similar ao porquê o comando chown do Unix usa dois pontos como separador: o chown assume que os nomes de usuários terminam com dois-pontos. Da mesma forma, os arquivos em lote têm um formato de arquivo.

O formato de arquivo de um arquivo em lotes pressupõe que o caractere de nova linha termina uma linha. Não há sequência de escape suportada. Então, o que você está pedindo não pode ser feito.

Uma possível solução alternativa é se o programa reconhecer uma seqüência de escape, como o reconhecimento de \ n. (JScript, suportado como arquivos .js que o CScript pode usar, suporta o comando unescape. WScript.Echo(unescape("%0d0a")); )

Outra abordagem comum para lidar com isso é se um programa suporta um fluxo de dados, que pode ser um nome de arquivo especificado ou o fluxo de "entrada padrão". Novos caracteres / sequências podem ser fornecidos para um programa dessa maneira.

Essas abordagens são usadas por vários programas. Eu não estou lembrando de nenhuma maneira de simplesmente ignorar um caractere de nova linha, nem qualquer outra forma padronizada de tentar codificar esse caractere de forma que todos / a maioria dos programas reconheçam os caracteres que você está tentando se referir. para.

    
por 24.08.2017 / 05:44