Windows: Como especificar o comando multilinha no prompt de comando?

170

como estendemos um comando para a próxima linha?

basicamente, o que é a alternativa do Windows para Linux

ls -l \
/usr/

aqui usamos barra invertida para estender o comando na próxima linha

qual é o equivalente para o windows?

Jigar
fonte
+1 para breve e concisa Q & A, exploração mais prolongado de tratamento de acento circunflexo em stackoverflow.com/questions/69068/...
Matt Wilkie

Respostas:

295

Depois de tentar quase todas as teclas do meu teclado:

C:\Users\Tim>cd ^
Mehr? Desktop

C:\Users\Tim\Desktop>

Então parece ser a chave ^.

Timbó
fonte
13
A Microsoft não pode cumprir seus próprios padrões, portanto, isso não funciona no PowerShell. O equivalente do PowerShell a ^ é `So C: \ Users \ Tim> cd` >> Desktop Leva você à área de trabalho de Tim \ 0 /
Ric Jafe
3
@RicJafe Por que deveria? O PowerShell é completamente separado! A chave equivalente para PS é `.
WhatIsHeDoing
Alguma idéia do que é o PowerShell?
Ryan
3
@RyanSeanWattrus Usando o mesmo método científico: `(l'accent grave)
Timbo 6/18
57

No prompt de comando do Windows, ^é usado para escapar do próximo caractere na linha de comando. (Like \é usado em strings.) Os caracteres que precisam ser usados ​​na linha de comando como devem devem ter um ^ prefixado, portanto é por isso que funciona para a nova linha.

Para referência, os caracteres que precisam ser escapados (se especificados como argumentos de comando e não entre aspas) são: &|()

Portanto, o equivalente ao seu exemplo de linux seria (o More? Sendo um prompt):

C:\> dir ^
More? C:\Windows
Daemin
fonte
15
O caractere '^' deve ser o último caractere da linha. Caso contrário, se você tiver ESPAÇO no final, o comando multilinha não funcionará.
Dmytro Ovdiienko
6

O caractere de intercalação funciona, no entanto, a próxima linha não deve começar com aspas duplas. por exemplo, isso não vai funcionar:

C:\ ^
"SampleText" ..

Comece a próxima linha sem aspas duplas (não é um exemplo válido, apenas para ilustrar)

Todos
fonte
1

Se você veio aqui procurando uma resposta para essa pergunta, mas não exatamente da maneira que o OP significava, ou seja, como você faz o CMD de várias linhas trabalhar em uma única linha, eu tenho uma resposta perigosa para você.

Tentar usar isso com coisas que realmente usam tubulação, como dizer, findstré bastante problemático. O mesmo vale para lidar com elses. Mas se você deseja que um comando condicional de várias linhas seja executado diretamente do CMD e não por meio de um arquivo em lotes, isso deve funcionar bem.

Digamos que você tenha algo assim em um lote que deseja executar diretamente no prompt de comando:

@echo off
for /r %%T IN (*.*) DO (
    if /i "%%~xT"==".sln" (
        echo "%%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file
        echo Dumping SLN file contents
        type "%%~T"
    )
)

Agora, você pode usar o carat de continuação de linha ( ^) e digitá-lo manualmente dessa maneira, mas aviso, é tedioso e, se você errar, pode aprender a alegria de digitar tudo novamente.

Bem, isso não vai funcionar com apenas ^graças a escapar mecanismos dentro de parênteses shrug Pelo menos não como escrito. Você realmente precisaria dobrar os quilates da seguinte forma:

@echo off ^
More? for /r %T IN (*.sln) DO (^^
More? if /i "%~xT"==".sln" (^^
More? echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file^^
More? echo Dumping SLN file contents^^
More? type "%~T"))

Em vez disso, você pode ser um scripter sorrateiro e sujo do lado errado das faixas que não precisam de quilates, trocando-os por um único pipe ( |) por continuação de um loop / expressão:

@echo off
for /r %T IN (*.sln) DO if /i "%~xT"==".sln" echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file | echo Dumping SLN file contents | type "%~T"
kayleeFrye_onDeck
fonte