web-dev-qa-db-fra.com

Plusieurs commandes sur une seule ligne dans un fichier batch Windows

Sous Unix, nous pouvons placer plusieurs commandes sur une seule ligne, comme ceci:

$ date ; ls -l ; date

J'ai essayé une chose similaire dans Windows:

 > echo %TIME% ; dir ; echo %TIME

Mais il a imprimé l'heure et n'exécute pas la commande dir.

Comment puis-je atteindre cet objectif?

102
Raghuram

Utilisation:

echo %time% & dir & echo %time%

De mémoire, cela équivaut au séparateur de point-virgule dans bash et à d'autres shells UNIXy.

Il y a aussi && (ou ||) qui n'exécute la deuxième commande que si la première a réussi (ou a échoué), mais la seule esperluette & est ce que vous recherchez ici.


Cela vous donnera probablement le même temps, car les variables d'environnement ont tendance à être évaluées en lecture plutôt qu'en exécution.

Vous pouvez contourner ce problème en activant l’extension retardée:

pax> cmd /v:on /c "echo !time! & ping 127.0.0.1 >nul: & echo !time!"
15:23:36.77
15:23:39.85

Cela est nécessaire à partir de la ligne de commande. Si vous faites cela dans un script, vous pouvez simplement utiliser setlocal:

@setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal
170
paxdiablo