Plusieurs commandes sur une seule ligne dans un fichier de commandes Windows

Réponses:

181

Utilisation:

echo %time% & dir & echo %time%

Ceci est, de mémoire, équivalent au séparateur 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 é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 différé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
paxdiablo
la source
Merci d'avoir répondu. Le problème est que cela fonctionne partiellement. le premier et le dernier% time% impriment la même heure même lorsque la commande (au milieu) prend au moins 40 secondes pour se terminer. (Je lance mon script au lieu de la commande dir)
Raghuram
1
C'est parce que les variables d'environnement sont évaluées lorsque la commande est lue plutôt qu'exécutée. Je mettrai à jour la réponse.
paxdiablo
Le problème persiste. Le script se termine avec le code 1. Mais le deuxième écho s'imprime toujours en même temps Voir cette opération 12: 57: 56.93 Un thread s'est arrêté pendant que 3 threads étaient en cours d'exécution. 12: 57: 56.93
Raghuram
3
J'avais tendance à utiliser time /t(ou echo.|time) au lieu de echo %time%contourner le problème.
Joey
1
Une idée comment obtenir% errorlevel% pour être correct sur les appels suivants?
BradLaney