Voglio eseguire due comandi in una console CMD di Windows.
In Linux lo farei così
touch thisfile ; ls -lstrh
Come si fa su Windows?
Come questo su tutti i sistemi operativi Microsoft dal 2000, e ancora oggi va bene:
dir & echo foo
Se volete che il secondo comando venga eseguito solo se il primo è uscito con successo:
dir && echo foo
La sintassi della singola e commerciale (&) per eseguire più comandi su una linea risale a Windows XP, Windows 2000, e alcune versioni precedenti di NT. (4.0 almeno, secondo un commentatore qui).
Ci sono un bel po' di altri punti su questo che troverete scorrendo questa pagina.
Seguono i dati storici, per coloro che possono trovarli educativi.
Prima di allora, la sintassi && era solo una caratteristica del sostituto della shell 4DOS prima che questa caratteristica fosse aggiunta all'interprete dei comandi Microsoft.
In Windows 95, 98 e ME, si usava invece il carattere pipe:
dir | echo foo
In MS-DOS 5.0 e successivi, attraverso alcune versioni precedenti di Windows e NT dell'interprete di comandi, il separatore di comandi (non documentato) era il carattere 20 (Ctrl+T) che qui rappresenterò con ^T.
dir ^T echo foo
Una citazione dalla documentazione:
Utilizzare comandi multipli e simboli di elaborazione condizionale
Potete eseguire più comandi da una singola riga di comando o script usando i simboli di elaborazione condizionale. Quando si eseguono comandi multipli con simboli di elaborazione condizionale, i comandi a destra del simbolo di elaborazione condizionale agiscono in base ai risultati del comando a sinistra del simbolo di elaborazione condizionale.
Per esempio, potreste voler eseguire un comando solo se il comando precedente fallisce. Oppure, potreste voler eseguire un comando solo se il comando precedente ha successo.
Potete usare i caratteri speciali elencati nella seguente tabella per passare più comandi.
& [...]
comando1 & comando2
.
Da usare per separare più comandi su una linea di comando. Cmd.exe esegue il primo comando e poi il secondo.
&& [...]
comando1 && comando2
.
Usa per eseguire il comando che segue && solo se il comando che lo precede ha successo. Cmd.exe esegue il primo comando, e poi esegue il secondo comando solo se il primo comando ha avuto successo.
|| [...]
comando1 || comando2
Usa per eseguire il comando che segue ||| solo se il comando che precede || fallisce. Cmd.exe esegue il primo comando, e poi esegue il secondo comando solo se il primo comando non è stato completato con successo (riceve un codice di errore maggiore di zero).
( ) [...]
(command1 & command2)
Da usare per raggruppare o annidare più comandi.
; o ,
comando1 parametro1;parametro2
.
Usare per separare i parametri dei comandi.