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


23

Estou tentando executar um comando cmd.exe, com uma quebra de linha ou 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?



Respostas:


19

Use o ^personagem como uma fuga:

command -option:text^

whatever

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


Muito legal, eu não sabia disso.
TJ Crowder

1
Isso que você sugere é que me permite inserir mais texto em uma nova linha. Não preserva a nova linha. O que eu quero é que entre "texto" e "qualquer coisa" seja uma nova linha. Algo parecido com isto: "text \ nwhatever"
rudimenter

Eu acredito que você tem que usar duas novas linhas de fazer isso, meu mau por não perceber isso no meu post original (agora editado)
Darth Android

1
Note-se que, se você tiver espaços no texto, precisará envolvê-los entre aspas. Além disso, inclua a citação final, caso contrário, o cursor será ignorado como caractere de escape e tratado como texto. Por fim, será necessário colocar aspas ao redor do texto em cada linha que contenha espaços (mesmo que não contenha espaços para segurança) e colocar um sinal de intercalação após a citação de fechamento de cada linha que continuar.
Synetech

1
Acabei aqui tentando encontrar uma maneira de colocar novas linhas nos comentários de um SHUTDOWN.EXEcomando. Acabei usando algo assim: shutdown -s -t 900 -c "foo bar"^ > Mais? "baz"^ > Mais? "test that."Funcionou.
Synetech

4

Use os códigos Alt com o teclado numérico

C:\>ver

Microsoft Windows [Version 6.3.9600]

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

C:\>

Esse caractere de avanço de linha pode ser inserido como um código Alt na CLI usando o teclado numérico: com o NumLock ativado, mantenha pressionada a tecla ALT e digite 10 no teclado numérico antes de liberá-la. Se você também precisar do CR, digite ambos com Alt + 13 e Alt + 10:♪◙

Nota: isso não funcionará em um arquivo em lotes.

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 existe e em que ordem - mas a parede de texto pathretornada é ilegível. Então é algo que você pode digitar rapidamente:

echo %path:;=◙% >con

Editar:

Adicionada a >consolução alternativa que Brent Rittenhouse descobriu para versões mais recentes do cmd.exe, onde o método original havia parado de funcionar.


Isso não parece funcionar para mim. Eu acabo e2 99 aa e2 97 99passando. Algum tipo de ponto de código unicode? Eu vejo os caracteres entrando na linha de comando. Alguma sugestão?
24418 Brad

@ Brad, posso confirmar que ele não parece mais funcionar no novo cmd.exe no Windows 10 e até minha caixa antiga do Windows 7 não se comporta mais dessa maneira.
Amit Naidu

Esquisito! Eu me pergunto se eu posso cavar um cmd.exe de idade a partir de algo ....
Brad

@ Brad, eu apenas tentei algumas coisas e percebi que você pode obter esse comportamento antigo se você alternar para Fontes Raster nas propriedades do console, em vez das fontes Lucida e True Type e marque a Use legacy consolecaixa de seleção. Mas parece muito ruim em um monitor de alta resolução.
Amit Naidu

1
Na verdade, acho que encontrei uma solução que funciona para isso completamente em QUALQUER fonte! Se você simplesmente repetir a linha com alt-10 caracteres e depois redirecioná-la para CON, funcionará! Por exemplo: (echo New-line detected rigghhhtt ◙^<--- HERE!) > CONOs parênteses ao redor são opcionais. Aqui está um exemplo mais robusto do que você pode fazer com isso (retornos de carro AND que agora funcionam e de forma totalmente independente!): I.imgur.com/qqN37PH.png
Brent Rittenhouse

1

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

echo %1

Em seguida, salve isso como testNewLines.bat

Então a linha cmd

testNewLines first line&echo Second Line&echo Third line

Resultou no seguinte eco de volta

primeira linha
segunda linha
terceira linha


1

Expandindo a resposta de Amit ( /superuser//a/1132659/955256 ) Encontrei uma maneira de fazer isso em qualquer fonte SEM usar o console herdado.

Tudo o que você precisa fazer é simplesmente ecoar a linha com caracteres alt-10 e, em seguida, redirecioná-la para cone funcionará!

Por exemplo, dado:

(eco Nova linha detectada rigghhhtt ◙ ^ <--- AQUI!)> CON

edit: Curiosidade, parece que você pode colocar o redirecionamento no início da seguinte maneira:

> CON echo Nova linha detectada rigghhhtt ◙ ^ <--- AQUI!

Estranho, não é?

Você obterá uma saída de:


New-line detected rigghhhtt  
<-- HERE!

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

Aqui está um exemplo mais robusto do que você pode fazer com esse retorno de carro AND, que agora funciona e de forma totalmente independente!

O melhor de tudo é que isso funcionará se você redirecionar para um arquivo também!
(simplesmente mude > CONpara> desired_output_file.txt

Desfrutar!


1

A saída de ^ é salvável

set br= ^
<</br (newline)>>
<</br>>

exemplo:

@echo off
setlocal enableExtensions enableDelayedExpansion
rem cd /D "%~dp0"


rem //# need 2 [/br], can't be saved to a var. by using %..%;
set br= ^



set "t=t1!br!t2!br!t3"

for /f "tokens=* delims=" %%q in ("!t!") do (
    echo %%q
)


:scIn
rem endlocal
pause
rem exit /b

; resultado:

t1
t2
t3
Press any key to continue . . .

0

Eu acredito que você não pode fazer isso a partir do cmd.exeshell do Windows . ( É não DOS. )


Você não precisa de um "shell personalizado" completo para isso. Você só precisará escrever algo como isto (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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.