Executar vários comandos com 1 linha na linha de comando do Windows?

65

Como posso executar vários comandos na linha de comando do Windows com apenas uma única linha?

Por exemplo, digamos que eu queira executar uma atualização SVN e copiar todos os arquivos para outro local ...

svn update; copy *.* c:\development\copy\

Isso não funciona obviamente. Existe um caractere ou delimitador como ';' para executar algo parecido com isto?

T. Stone
fonte

Respostas:

105

Sim existe. É &.

&& executará o comando 2 quando o comando 1 estiver completo, desde que não falhe.

& será executado independentemente.

Phoshi
fonte
7
&e &&só funciona no Windows ' cmd.exe- o que não é DOS.
grawity
22
'DOS' como um termo é frequentemente usado para descrever o cmd, e como o op usa svn, duvido muito que ele ainda esteja usando o DOS. Não há necessidade de ser :) pedante
Phoshi
Lá: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Ele usa o Windows XP. Certamente não o DOS (nunca pareceu tão bom assim;))
Phoshi 30/10/09
8
Eu acho que é seguro supor que quando alguém menciona "DOS", realmente significa "prompt de comando do Windows". Vou falar mal aqui e dizer que a maioria das pessoas provavelmente não usa muito o DOS atualmente. Obrigado pela correção - é um pouco desnecessário nos dias de hoje.
Murdoch Ripper
@MurdochRipper O que você quer dizer? Estou vendo essa pergunta no DOS agora. ;)
Andrew
4

Pelo menos no MS-DOS 6.22, eu costumava usar a tecla Ctrl+ Tpara obter um tipo de símbolo de parágrafo. Isso funcionou exatamente como o &mencionado por Phoshi. No entanto, isso só funcionará se você estiver executando o doskey.exe.

Torben Gundtofte-Bruun
fonte
4

Se você deseja executar vários comandos com 1 linha, onde está iniciando os comandos start, por exemplo, se você deseja executar um comando como este:

start "" netsh dump && pause

Em seguida, você precisa fazer isso em duas etapas (a solução de uma linha está no final desta resposta).

Primeiro, escreva os comandos em um arquivo em lotes temporário (nesse caso, você pode usar &ou &&):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd

Observe que você precisa "escapar" de cada um "&"s(e comercial) com a "^" para permitir que eles sejam tratados como caracteres comuns no echocomando. Como alternativa, você pode criar o arquivo em lotes temporário com um editor de texto, como o Bloco de Notas.

Em seguida, use startpara iniciar o arquivo em lote:

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"


Nota: O par vazio de aspas duplas é o "Title"que será mostrado na barra de título da janela de comando que startserá aberta. Este "Title"argumento é tecnicamente um argumento opcional para start, mas é realmente necessário , se o comando que startserá executado estiver entre aspas duplas. Por exemplo, no segundo exemplo:

start "" "temporary foobar.cmd"

se você deixar de fora o par vazio de aspas duplas como este:

start "temporary foobar.cmd"

em seguida start, abrirá uma nova janela de comando e usará "temporary foobar.cmd"como a nova janela de comando "Title", e nada será executado na nova janela de comando.)

Se você deseja startaguardar a conclusão do arquivo em lotes (depois que o arquivo pausefor descartado), antes de startconcluir, adicione a /wopção ao startcomando:

start "" /w foobar.cmd

Você pode juntar tudo isso em uma linha e até remover (excluir) o arquivo em lotes temporário ( foobar.cmd):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd && start "" /w foobar.cmd && del foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd

Observe que, se você deseja excluir o arquivo em lotes temporário, é necessário executar startcom a /wopção; caso contrário, o arquivo em lote temporário provavelmente será excluído antes que ele possa ser executado.

Kevin Fegan
fonte
Em vez de /wum poderia dormir um pouco antes de excluir o arquivo. timeout 2fará isso, por exemplo.
Antonio
@ Kevin-Fegan Por que você precisa de um arquivo cmd temporário ???
maxxyme 10/07
0

Caso você deseje agrupar o primeiro comando com um if, mas ainda assim deseje que o segundo comando seja executado independentemente, é necessário agrupar o if com um cmd / c, assim:

cmd / c, se existir abc. (rd / q abc) e eco Olá

Se você não prefixar o if com cmd / c, todo o comando se tornará parte de if (o que você pode não querer).


fonte
Ou você poderia dizer(if exist abc. command₁) & command₂
Scott
@ Scott Eu sei que elogios são um pecado nesses sites, mas start "" cmd /c "(command₁) & (command₂)"é legítimo não respondido em nenhum lugar da Web, mas é a única maneira de vincular a maioria das instruções em lote. Parabens.
John Kens
11
Agradeço elogios / parabéns, mas não entendo o que você está dizendo. user138334 disse: “No caso de você querer quebrar o primeiro comando com um ifmas ainda como o segundo comando para executar independentemente em seguida, então você tem que envolver o ifcom um cmd /cbem”, e eu respondi com uma maneira de fazê-lo sem cmd /c. Então, por que você está dizendo que a única maneira de vincular a maioria das instruções em lote está usando cmd /c? E por que você está jogando startna mistura?
Scott
0

Sim use &!

%command1% & %command2% executa os dois comandos

%command1% && %command2% executa o primeiro comando, se isso funcionou, execute o segundo comando

%command1% || %command2% executa o primeiro comando, se isso falhou, execute o comando segundos

Veja aqui

KIRBY INHALES U
fonte
E também &, &&e ||não são, na verdade, um comando, é parte do lote. Não é um comando.
KIRBY INHALES U
E %command%pode executar essa string como um comando, visto aqui
KIRBY INHALES U
-1

Descobri que o uso de 'START' corrigia vários comandos funcionando (estou executando o Windows 10 Home). Por exemplo:

START chrome.exe "page.web.com" & timeout 20
bazzakay
fonte
As respostas não devem conter comentários, como "Obrigado por isso", isso distrai sua solução. Você deve considerar a edição deste resposta, então ele simplesmente responde à pergunta, com o máximo de detalhes muito, mas sem o ruído (ou seja, o comando que não funciona)
Ramhound
O que ele está procurando &, não é start!
NetwOrchestration
Que problema isso resolve? O que acontece quando você digita a linha de comando sem start?
Scott
-2

crie um arquivo em lotes com um nome curto, ou seja, bat.bat .

add cmd /c %1 
    cmd /c %2 
rem

e assim por diante para 9 linhas e salve

use-o entre aspas duplas

bat "command one" "command two" "command three" 

cmd /c executará cada comando e será desligado para a próxima linha, sem dizer que isso é melhor que &&, apenas que é fácil.

prumo
fonte