![El comando de pausa se ejecuta fuera de orden cuando se ejecuta "start cmd /c" varias veces](https://rvso.com/image/1592546/El%20comando%20de%20pausa%20se%20ejecuta%20fuera%20de%20orden%20cuando%20se%20ejecuta%20%22start%20cmd%20%2Fc%22%20varias%20veces.png)
Tengo un script como este:
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
@start /b cmd /c net stop "Service"
pause
Sin embargo, el pause
comando se ejecuta antes de que se hayan ejecutado todas las líneas anteriores en el script. Necesito usarlo @start /b cmd /c
para que no tenga que esperar a que "Detenga el servicio..." después de cada servicio (aproximadamente 100) de tiempo. ¿Hay alguna forma de decirle a cmd que espere hasta que @start /b cmd /c net stop "Service"
se hayan completado todos los comandos y luego ejecute la pausa?
Para ver de qué estoy hablando, ejecute este archivo por lotes:
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
@start /b cmd /c echo Hello
pause
En lugar de que Pause
ocurra después de que se hayan impreso todos Hello
, sucede en el medio:
Respuesta1
El comando start
inicia una aplicación en su propio contexto, además de lo que esté haciendo su consola actual, es por eso que cuando termine devolverá el resultado, una vez que su terminal actual haya terminado con lo que esté haciendo. Es por eso que aunque envías todos estos comandos de inicio, tu pausa no es esperar a que todos terminen. Solo espera el tiempo suficiente para iniciar los procesos. Es por eso que apareces pause
en medio de ellos, es solo una cuestión de sincronización.
Entonces, para resolver tu problema, puedes esperar a que terminen /wait
o hacer una llamada a un segundo script por lotes, de esta manera puedes esperar algunos comandos y no otros, si lo prefieres:
Técnica de espera para tu guión.
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
@start /wait /b cmd /c echo Hello
pause
Técnica con script de lanzador.
@echo off
title Laucher
:: This scripts don't need to be waited
start /b cmd /c 'script1.bat'
:: This script needs to be waited
start /wait /b cmd /c 'script2.bat'
Guión1
@echo off
title Script to run without waiting
SomeProcessThatDoesn'tNeedsToBeWaited
Guión2
@echo off
title Script to run to be waited
SomeProcessThatNeedsToBeWaited
salud