Varios comandos en una sola línea en un archivo por lotes de Windows

Respuestas:

181

Utilizar:

echo %time% & dir & echo %time%

Esto es, de memoria, equivalente al separador de punto bashy coma en y otros shells de UNIXy.

También hay &&(o ||) que solo ejecuta el segundo comando si el primero tuvo éxito (o falló), pero el signo comercial único &es lo que está buscando aquí.


Sin embargo, es probable que le dé el mismo tiempo, ya que las variables de entorno tienden a evaluarse en lectura en lugar de ejecutar.

Puede evitar esto activando la expansión retardada:

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

Eso es necesario desde la línea de comandos. Si está haciendo esto dentro de un script, puede usar setlocal:

@setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal
paxdiablo
fuente
Gracias por la respuesta. El problema es que funciona parcialmente. la primera y la última% time% se imprime al mismo tiempo incluso cuando el comando (en el medio) tarda al menos 40 segundos en completarse (ejecuto mi script en lugar del comando dir)
Raghuram
1
Esto se debe a que las variables de entorno se evalúan cuando el comando se lee en lugar de ejecutarse. Actualizaré la respuesta.
paxdiablo
Aún así, el problema persiste. El script está saliendo con el código 1. Pero aún así, el segundo eco se imprime al mismo tiempo. Vea esta operación 12: 57: 56.93 Un hilo salió mientras se estaban ejecutando 3 hilos. 12:57: 56.93
Raghuram
3
Solía ​​usar time /t(o echo.|time) en lugar de echo %time%eludir el problema.
Joey
1
¿Alguna idea de cómo hacer que% errorlevel% sea correcto en las siguientes llamadas?
BradLaney