El comando de pausa se ejecuta fuera de orden cuando se ejecuta "start cmd /c" varias veces

El comando de pausa se ejecuta fuera de orden cuando se ejecuta "start cmd /c" varias veces

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 pausecomando se ejecuta antes de que se hayan ejecutado todas las líneas anteriores en el script. Necesito usarlo @start /b cmd /cpara 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 Pauseocurra después de que se hayan impreso todos Hello, sucede en el medio:

ingrese la descripción de la imagen aquí

Respuesta1

El comando startinicia 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 pauseen medio de ellos, es solo una cuestión de sincronización.

Entonces, para resolver tu problema, puedes esperar a que terminen /waito 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

información relacionada