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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.