Como posso inserir uma nova linha em um comando cmd.exe?

16

Estou tentando executar um comando em cmd.exe , com uma quebra de linha ou uma nova linha como parte do comando, como abaixo:

command -option:text  
whatever

Mas toda nova linha executa o comando, em vez de continuar o comando na próxima linha.

Então, como posso inserir um novo caractere de linha ou criar um comando de várias linhas no cmd.exe?

    
por rudimenter 08.06.2010 / 11:38

5 respostas

15

Use o caractere ^ como escape:

command -option:text^

whatever

Estou assumindo que você está usando cmd.exe do Windows XP ou similar. Este não é o DOS atual. Se você estiver usando o DOS (MS-DOS, Win3.1, Win95, Win98, WinME), então eu não acredito que haja uma fuga para novas linhas. Você precisaria executar um shell personalizado. cmd.exe solicitará "Mais"? cada vez que você pressionar enter com um ^ no final da linha, basta pressionar enter novamente para realmente escapar / incorporar uma nova linha.

    
por 08.06.2010 / 11:49
2

Use códigos Alt com o numpad

C:\>ver

Microsoft Windows [Version 6.3.9600]

C:\>echo Line1◙Line2 >con
Line1
Line2

C:\>

Esse caractere de feed de linha pode ser inserido como um código Alt na CLI usando o numpad: com NumLock ativado abaixe ALT e digite 10 no numpad antes de liberar ALT. Se você precisar do CR também, digite ambos com Alt + 13 e depois Alt + 10: ♪◙

Observação: isso não funcionará em um arquivo de lote.

Exemplo de caso de uso:

Você está tentando ler as variáveis de ambiente% PATH% ou% CLASSPATH% para obter uma visão geral rápida do que está lá e em qual ordem, mas a parede de texto que path retorna é ilegível. Então isso é algo que você pode digitar rapidamente:

echo %path:;=◙% >con

Editar:

Adicionada a solução >con que Brent Rittenhouse descobriu para as versões mais recentes do cmd.exe, em que o método original parou de funcionar.

    
por 08.10.2016 / 03:28
1

Eu acredito que você não pode fazer isso a partir do shell cmd.exe do Windows. ( Não é não DOS. )

Você não precisa de um "shell personalizado" completo para isso. Você só precisará escrever algo assim (exemplo em Python ):

import subprocess
subprocess.call(["C:\bin\sometool.exe", "test\nwith\nnewlines"])

Ou Ruby:

Kernel::exec "C:\bin\sometool.exe", "test\nwith\nnewlines"

Veja, não é tão difícil.

    
por 08.06.2010 / 14:46
1

Não sei se isso funcionará para você, mas colocando & echo (o espaço a seguir é importante). entre cada afirmação que você quer em uma nova linha. Eu só tentei isso com um arquivo bat simples de

echo %1

Em seguida, salvou isso como testNewLines.bat

Então, a linha cmd

testNewLines first line&echo Second Line&echo Third line

Resultou que o seguinte foi ecoado de volta

primeira linha
segunda linha
Terceira linha

    
por 08.06.2010 / 15:10
1

Expandindo a resposta da Amit ( link ) eu encontrei uma maneira de fazer isso em qualquer fonte SEM usar o console legado.

Tudo o que você precisa fazer é simplesmente repetir a linha com caracteres alt-10 e, em seguida, redirecioná-lo para con e ele funcionará!

Por exemplo, dado:

(echo New-line detected rigghhhtt ◙^<--- HERE!) > CON

edit: Fato engraçado, parece que você pode colocar o redirecionamento no começo assim:

> CON echo New-line detected rigghhhtt ◙^<--- HERE!

Estranho, né?

Você receberá uma saída de:

New-line detected rigghhhtt  
<-- HERE!

(os parênteses ao redor são opcionais).

Aqui é um exemplo mais robusto do que você pode fazer com isso E retornos de carro que agora funcionam, e de forma totalmente independente!:

O melhor de tudo, isso funciona se você redirecionar para um arquivo também!
(basta alterar > CON para > desired_output_file.txt

Aproveite!

    
por 18.10.2018 / 20:10