MyFile1.bat invoca MyFile2.bat dos veces:

start MyFile2.bat argA, argB, argC
start MyFile2.bat argX, argY, argZ

A este punto, ¿cómo puedo esperar que tanto los procesos generados por las llamadas a MyFile2.bat ha completado?

OriginalEl autor barak manos | 2013-12-02

4 Comentarios

  1. 7

    Simple uso de la Start /WAIT parámetro.

    start /wait MyFile2.bat argA, argB, argC
    start /wait MyFile2.bat argX, argY, argZ
    
    O cambiar start a call, que fue mi primer pensamiento. Sin embargo, tal vez quieren que las dos llamadas a ejecutar en paralelo. En este caso, ni tu sugerencia ni la mía sería muy apropiado.

    OriginalEl autor Knuckle-Dragger

  2. 3
    start /w cmd /c "start cmd /c MyFile2.bat argA, argB, argC & start cmd /c MyFile2.bat argA, argB, argCt"
    

    Según mis pruebas, esto debe funcionar siempre que el con miarch2.bate .Finalmente todas las rutas de acceso a los archivos bat debe ser utilizado.

    OriginalEl autor npocmaka

  3. 3

    Puede utilizar «los archivos de estado» para saber que, por ejemplo, con miarch1.bate hacer lo siguiente:

    echo X > activeProcess.argA
    start MyFile2.bat argA, argB, argC
    echo X > activeProcess.argX
    start MyFile2.bat argX, argY, argZ
    :waitForSpawned
    if exist activeProcess.* goto waitForSpawned
    

    E insertar esta línea al final de la con miarch2.bat:

    del activeProcess.%1
    

    También puede insertar un ping retraso en el ciclo de espera con el fin de producir menos desechos de la CPU en este bucle.

    +1, pero para asegurarse de que no puede haber problemas con los permisos, tal vez sería una buena idea para crear los archivos de bandera en la %TEMP% directorio. Y probablemente voy a añadir un pequeño retardo entre :waitForSpawned y la condición, y también me gustaría insertar el del línea (quiso decir del activeProcess.*, por cierto?) en el inicio de la secuencia de comandos, sólo para estar en el lado seguro en caso de que el script se interrumpe de forma inesperada.

    OriginalEl autor Aacini

  4. 2

    Usted puede hacer esto de esta manera :

    start MyFile2.bat argA, argB, argC
    start MyFile2.bat argX, argY, argZ ^& echo.^>End.val ^& exit
    
    :testEnd
    if exist end.val (del end.val
                      echo Process completed
                      pause)
    >nul PING localhost -n 2 -w 1000
    goto:testEnd
    

    Cuando la segunda start2.bate de terminar el trabajo, a continuación, un archivo «Final.val» será creado, solo tiene que probar si este archivo existe, entonces usted sabe que el proceso se complete.

    Si la primera con miarch2 puede tomar más tiempo para ejecutar, a continuación, el segundo puede hacer lo mismo (con otro nombre) con el primer start myfile2.bat y hacer una prueba más en el :testend

     start MyFile2.bat argA, argB, argC ^& echo.^>End1.val ^& exit
     start MyFile2.bat argX, argY, argZ ^& echo.^>End.val ^& exit
    
    :testEnd
    if exist end.val if exist end1.val (del end.val
                                        del end1.val
                                        echo Process completed
                                        pause)
    >nul PING localhost -n 2 -w 1000
    goto:testEnd
    

    OriginalEl autor SachaDee

Dejar respuesta

Please enter your comment!
Please enter your name here