it-swarm-eu.dev

Esegui più comandi con Windows nella riga di comando di Windows?

Come posso eseguire più comandi nella riga di comando di Windows con una sola riga?

Ad esempio, per esempio, voglio eseguire un aggiornamento SVN e quindi copiare tutti i file in un'altra posizione ...

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

Questo non funziona ovviamente. C'è un carattere o delimitatore come ';' per eseguire qualcosa come questo?

65
T. Stone

Si C'è. Suo &.

&& eseguirà il comando 2 quando il comando 1 è completo purché non abbia esito negativo.

& verrà eseguito indipendentemente.

105
Phoshi

Se si desidera eseguire più comandi con 1 riga, dove si stanno avviando i comandi con start, ad esempio, se si desidera eseguire un comando come questo:

start "" netsh dump && pause

Quindi, è necessario farlo in 2 passaggi (la soluzione a una linea è alla fine di questa risposta).

Innanzitutto, scrivi i comandi su un file batch temporaneo (in questo caso, puoi usare & o &&):

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

Si noti che è necessario "sfuggire" ciascuno dei "&"s (e commerciale) con un "^" per consentire loro di essere trattati come caratteri ordinari nel comando echo. In alternativa, è possibile creare il file batch temporaneo con un editor di testo, ad esempio Blocco note.

Quindi, usa start per avviare il file batch:

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


Nota: La coppia vuota di virgolette doppie è per il "Title" che verrà mostrato nella barra del titolo della finestra di comando che start si aprirà. Questo argomento "Title" è tecnicamente un opzionale argomento a start, ma in realtà è required , se il comando che start eseguirà è double-quoted. Ad esempio, nel secondo esempio:

start "" "temporary foobar.cmd"

se si omette la coppia vuota di virgolette doppie in questo modo:

start "temporary foobar.cmd"

quindi start aprirà una nuova finestra di comando e userà "temporary foobar.cmd" come nuova finestra di comando "Title" e nothing verrà eseguito nella nuova finestra di comando.)

Se si desidera start per attendere il completamento del file batch (dopo che pause è stato eliminato), prima che start sia completato, è necessario aggiungere l'opzione /w al comando start:

start "" /w foobar.cmd

Puoi mettere tutto insieme su una riga e persino rimuovere (eliminare) il file batch temporaneo (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

Si noti che se si intende eliminare il file batch temporaneo, è necessario eseguire start con l'opzione /w, altrimenti il ​​file batch temporaneo verrà probabilmente eliminato prima che possa essere eseguito.

4
Kevin Fegan

Almeno in MS-DOS 6.22 ho usato la chiave Ctrl+T per ottenere una sorta di simbolo di paragrafo. Questo ha funzionato proprio come il & menzionato da Phoshi. Questo funzionerà comunque, se hai doskey.exe in esecuzione.

usa &!

%command1% & %command2% esegue entrambi i comandi

%command1% && %command2% esegue il primo comando, se quello ha funzionato esegue il secondo comando

%command1% || %command2% esegue il primo comando, se non è riuscito esegue il comando secondi

Vedi qui

0
KIRBY INHALES U

Nel caso in cui si desideri racchiudere il primo comando con un if ma si desidera comunque eseguire il secondo comando indipendentemente da questo, allora è necessario racchiudere il se con un cmd/c così come questo:

cmd/c se esiste abc. (rd/q abc) & echo ciao

Se non si antepone il if con cmd/c, allora l'intero comando diventa parte di if (che potrebbe non volere).

0
user138334