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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.