2009-10-30 00:17:46 +0000 2009-10-30 00:17:46 +0000
67
67

Executar comandos múltiplos com 1 linha na linha de comandos do Windows?

Como posso executar comandos múltiplos na linha de comandos do Windows com apenas uma linha?

Então, por exemplo, digamos que quero executar uma actualização SVN e depois copiar todos os ficheiros para outro local…

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

Isso não funciona obviamente. Existe algum personagem ou delimitador como ‘;’ para executar algo como isto?

Respostas (6)

107
107
107
2009-10-30 00:24:41 +0000

Sim, há. É &.

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

& executará independentemente.

4
4
4
2014-02-12 06:33:03 +0000

Se quiser executar comandos múltiplos com 1 linha, onde está a iniciar os comandos com start, por exemplo, se quiser executar um comando como este:

start "" netsh dump && pause

Então, precisa de o fazer em 2 passos (a solução de uma linha está no final desta resposta).

Primeiro, escreva os comandos num ficheiro de lote temporário (neste caso, pode usar & ou &&):

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

Note que precisa de “escapar” a cada um dos "&"s (amperesandos) com um "^" para permitir que sejam tratados como caracteres vulgares no comando echo   Alternativamente, pode criar o ficheiro de lote temporário com um editor de texto, tal como o Bloco de Notas.

Depois, use start para iniciar o ficheiro de lote:

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

Note: O par de marcas de aspas duplas vazio é para o "Title" que será mostrado na barra de título da janela de comando que o start irá abrir. Este argumento "Title" é tecnicamente um argumento opcional a start, mas na realidade é required* , se o comando que start será executado estiver duplamente cotado. Por exemplo, no segundo exemplo:

start "" "temporary foobar.cmd"

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

& > start "temporary foobar.cmd" & > então start abrirá uma nova janela de comandos, e usará "temporary foobar.cmd" como a nova janela de comandos "Title", e nada será executada na nova janela de comandos).

Se quiser start esperar que o ficheiro de lote seja completado (após o pause ser descartado), antes de start ser completado, então terá de adicionar o /w ao comando start:

start "" /w foobar.cmd

Pode juntar tudo isto numa só linha e até remover (apagar) o ficheiro de lote 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

Note que se vai apagar o ficheiro de lote temporário, precisa de executar start com a opção /w, caso contrário, o ficheiro de lote temporário será provavelmente apagado antes de ter a oportunidade de executar.

4
4
4
2009-11-16 07:41:51 +0000

Pelo menos em MS-DOS 6.22 eu costumava usar a chave Ctrl+T para obter uma espécie de símbolo de parágrafo. Isto funcionou tal como o & mencionado por Phoshi. No entanto, isto só funcionará, se tiver o doskey.exe a funcionar.

0
0
0
2018-07-12 07:51:31 +0000

Sim* usa &!

%command1% & %command2% corre os dois comandos

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

%command1% || %command2% corre o primeiro comando, se isso falhou corre o segundo comando

Veja aqui

-1
-1
-1
2016-12-07 17:03:12 +0000

Descobri que usando ‘START’ fixava comandos múltiplos a funcionar (estou a correr o Windows 10 Home). Por exemplo:

START chrome.exe "page.web.com" & timeout 20
-2
-2
-2
2014-10-21 05:01:24 +0000

fazer um ficheiro de lote com um nome curto ie bat.bat*.

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

e assim por diante para 9 linhas e guardar

depois utilizá-lo com aspas duplas

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

cmd /c executará cada comando e desligar-se-á para a linha seguinte não dizendo que isto é melhor do que && apenas que é fácil.