Eseguire più comandi con 1 riga nella riga di comando di Windows?


65

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

Quindi, ad esempio, dì che voglio eseguire un aggiornamento SVN e quindi copiare tutti i file in un'altra posizione ...

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

Non funziona ovviamente. C'è un personaggio o un delimitatore come ';' eseguire qualcosa del genere?

Risposte:


105

Si C'è. Lo è &.

&& eseguirà il comando 2 al termine del comando 1 purché non abbia esito negativo.

& verrà eseguito indipendentemente.


7
&e &&funziona solo in Windows " cmd.exe, che non è DOS.
gravità

22
'DOS' come termine viene spesso usato per descrivere cmd, e visto che l'op utilizza svn, dubito fortemente che stia ancora usando DOS. Non c'è bisogno di essere pedanti :)
Phoshi,

Lì: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Usa Windows XP. Certamente non DOS (non è mai stato così bello;))
Phoshi,

8
Penso che sia sicuro presumere che quando qualcuno menziona "DOS", in realtà significano "Prompt dei comandi di Windows". Ho intenzione di uscire su un arto qui e dire che la maggior parte delle persone probabilmente non usano molto DOS in questi giorni. Grazie per la correzione - al giorno d'oggi è un po 'inutile.
Murdoch Ripper,

@MurdochRipper Che vuoi dire? Sto visualizzando questa domanda in DOS in questo momento. ;)
Andrew,

4

Almeno in MS-DOS 6.22 usavo la chiave Ctrl+ Tper ottenere una specie di simbolo di paragrafo. Questo ha funzionato proprio come &menzionato da Phoshi. Funzionerà comunque solo se doskey.exe è in esecuzione.


4

Se si desidera eseguire più comandi con 1 riga, da cui si stanno avviando i comandi 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 riga è alla fine di questa risposta).

Innanzitutto, scrivi i comandi in 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" a ciascuna delle "&"s(e commerciali) con a "^" per consentire loro di essere trattati come normali caratteri nel echocomando. In alternativa, è possibile creare il file batch temporaneo con un editor di testo, ad esempio Blocco note.

Quindi, utilizzare startper avviare il file batch:

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


Nota: la coppia vuota di virgolette doppie è per quella "Title"che verrà mostrata nella barra del titolo della finestra di comando che startsi aprirà. Questo "Title"argomento è tecnicamente un argomento facoltativo per start, ma è effettivamente richiesto , se il comando che startverrà eseguito è tra virgolette doppie. Ad esempio, nel secondo esempio:

start "" "temporary foobar.cmd"

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

start "temporary foobar.cmd"

quindi startaprirà una nuova finestra di comando e la utilizzerà "temporary foobar.cmd"come nuova finestra di comando "Title", e nulla verrà eseguito nella nuova finestra di comando.)

Se si desidera startattendere il completamento del file batch (al termine pausedell'eliminazione), prima del startcompletamento, è necessario aggiungere l' /wopzione al startcomando:

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 startcon l' /wopzione, altrimenti il ​​file batch temporaneo verrà probabilmente eliminato prima che abbia la possibilità di essere eseguito.


Invece di /wuno potrebbe mettere un breve sonno prima di eliminare il file. timeout 2lo farà, per esempio.
Antonio,

@ kevin-fegan perché hai bisogno di un file cmd temporaneo ???
max

0

Nel caso in cui si desideri racchiudere il primo comando con un if, ma si vorrebbe comunque eseguire il secondo comando a prescindere, allora si deve avvolgere il if con un cmd / c così:

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

Se non si antepone if con cmd / c, l'intero comando diventa parte di if (cosa che potrebbe non essere utile).


Oppure potresti dire(if exist abc. command₁) & command₂
Scott, il

@Scott So che i complimenti sono un peccato su questi siti, ma non start "" cmd /c "(command₁) & (command₂)"è legittimo rispondere a nessuna parte del web, ma è l'unico modo per collegare la maggior parte delle istruzioni batch. Complimenti a te.
John Kens,

1
Apprezzo i complimenti / congratulazioni, ma non capisco cosa stai dicendo. user138334 ha detto, "Nel caso in cui si desideri racchiudere il primo comando con un ifma si desidera comunque eseguire il secondo comando a prescindere quindi si deve avvolgere anche il ifcon un cmd /c", e ho risposto con un modo di farlo senza cmd /c. Quindi perché stai dicendo che l'unico modo per collegare la maggior parte delle istruzioni batch sta usando cmd /c? E perché stai buttando startnel mix?
Scott,

0

Sì, usa &!

%command1% & %command2% esegue entrambi i comandi

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

%command1% || %command2% esegue il primo comando, se fallito eseguire il comando secondi

Vedi qui


Inoltre &, &&e in ||realtà non sono un comando, fa parte del batch. Non un comando
KIRBY INHALES U

E %command%può eseguire quella stringa come comando, visto qui
KIRBY INHALES U

-1

Ho scoperto che l'uso di 'START' ha risolto il funzionamento di più comandi (sto eseguendo Windows 10 Home). Per esempio:

START chrome.exe "page.web.com" & timeout 20

Le risposte non devono contenere commenti, come "Grazie per questo", distrae dalla tua soluzione. Dovresti prendere in considerazione la modifica di questa risposta, quindi risponde semplicemente alla domanda, con il maggior numero di dettagli ma senza il rumore (cioè il comando che non funziona)
Ramhound

Quello che sta cercando &, non lo è start!
NetwOrchestration,

Quale problema risolve? Cosa succede quando si digita la riga di comando senza start?
Scott,

-2

crea un file batch con un nome breve, ad esempio bat.bat .

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

e così via a 9 righe e salva

quindi usalo con virgolette doppie

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

cmd /c eseguirà ogni comando e si spegnerà per la riga successiva senza dire che è meglio di && solo che è facile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.