Batch - Esperar a que termine un proceso

Resuelto
Hola,
actualmente estoy trabajando en un batch, al inicio de este se lanza un programa y mi batch se pone en pausa, pero me gustaría que el batch continúe tan pronto como el proceso lanzado se cierre.
¿Alguien tiene la solución?

PD: Tengo Windows XP

6 respuestas

  1. Hola,
    Para hacer que un proceso sea bloqueante en MS-DOS, basta con utilizar el comando start de la siguiente manera:
     start /wait path\file.exe 
    8
    1. Meeeeeeeeeeeeeeeeeeeeeeeeerrrrrrrrrrrrrrrrrrrrrrrrrrrrciiiiiiiiiiiiiiiiiiiiiiiiiiiii
      muchas gracias, lo estaba buscando desde........................
      0
    2. TE QUIERO
      de verdad
      0
  2. Démarrer
    3
    1. Hola,

      Prueba mejor con una LLAMADA, el INICIO no "devuelve" el control al que llama.
      --
      Atentamente.

      Cchristian.
      0
    2. @cchristianFranchement, es la segunda vez que me ayudas, ¡eres un crack en MS-DOS! ¡Gracias!
      0
    3. Hmm, bastante eficaz, pero tengo un caso que no resuelve: ¿cómo saber cuándo ha terminado un Installshield?
      este último crea un proceso clon, así que, call no es suficiente :(

      He intentado con diferentes parámetros de IS (incluyendo /deleter y /clone_wait o /wait_clone), eso no ha cambiado nada :(
      0
    4. Bueno, he encontrado una solución que funciona para mi caso, con un VBscript (.vbs)

      Aquí está mi código, si el formato no lo arruina, solo hay que copiarlo/pegarlo para ejecutarlo.

      En resumen, en mi caso, simplemente espero que dos procesos (los de un Installshield) terminen antes de continuar la ejecución.

      El código que presento aquí es solo un script de espera, que es llamado, más arriba, por un batch que lanza varios otros batchs mediante calls.
      i.e. :
      call batch1.bat
      call batch2.bat
      call wait.vbs
      call batch3.bat
      etc...

      'Script que espera a que finalice el proceso Installshield para permitir que las instalaciones continúen.
      'Siempre he visto los mismos dos procesos en las máquinas: _INS5576._MP y _ISDEL.EXE
      'Si por alguna razón, los procesos creados tienen otros nombres, será necesario lanzar las etapas manualmente,
      'o encontrar una manera más confiable de automatizar las instalaciones.

      wscript.sleep 5000 ' Esperamos un poco para estar seguros de que la instalación se ha iniciado

      set svc=getobject("winmgmts:root\cimv2")
      sQuery1="select * from win32_process where name='_INS5576._MP'" ' Nombre del proceso del cual queremos esperar su finalización
      sQuery2="select * from win32_process where name='_ISDEL.EXE'" ' Nombre del proceso del cual queremos esperar su finalización
      set cproc1=svc.execquery(sQuery1)
      set cproc2=svc.execquery(sQuery2)
      iniproc=cproc1.count + cproc2.count 'Número de procesos con el nombre buscado
      Do While iniproc > 0 'Bucle mientras quede al menos uno en ejecución
      wscript.sleep 1333 'Esperas relativamente pasivas
      set svc=getobject("winmgmts:root\cimv2")
      set cproc1=svc.execquery(sQuery1)
      set cproc2=svc.execquery(sQuery2)
      iniproc=cproc1.count + cproc2.count
      Loop
      set cproc1=nothing 'Liberación de la memoria ?? de variables del sistema ??
      set cproc2=nothing
      set svc=nothing

      'Set WshShell = WScript.CreateObject("WScript.Shell")
      'WshShell.Run "%windir%\notepad.exe", 1, True 'lanzamiento de un programa una vez que los esperados han terminado
      'Set WshShell = Nothing
      0
  3. Hola,

    ¿Tu batch lanza otro batch si he entendido bien?

    ¿Este programa llamado se activa con qué comando, CALL, START.............

    --
    Atentamente.

    Cchristian.
    1
    1. MS-DOS es un sistema mono-tarea (un comando a la vez), así que no es necesario incluir un código para esperar el final del proceso, eso ya se hace.

      Si quieres esperar un poco:
       ping localhost > NUL 

      @+
      0
      1. ok, lo intentaré
        0
        1. Buenas noches,

          Gracias, mantennos informados,
          --
          Atentamente.

          Cchristian.
          0
      2. Era efectivamente eso.
        0
        1. Hola,

          Gracias por la respuesta,
          --
          Atentamente.

          Cchristian.
          0