Batch - Esperar a que termine un proceso

Resuelto
joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro -  
 anonyme -
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. W95Psp Mensajes publicados 99 Fecha de registro   Estado Miembro Última intervención   36
     
    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. anonyme
       
      Meeeeeeeeeeeeeeeeeeeeeeeeerrrrrrrrrrrrrrrrrrrrrrrrrrrrciiiiiiiiiiiiiiiiiiiiiiiiiiiii
      muchas gracias, lo estaba buscando desde........................
      0
    2. anonyme
       
      TE QUIERO
      de verdad
      0
  2. joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro 45
     
    Démarrer
    3
    1. cchristian Mensajes publicados 928 Estado Miembro 131
       
      Hola,

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

      Cchristian.
      0
      1. joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro 45 > cchristian Mensajes publicados 928 Estado Miembro
         
        Franchement, es la segunda vez que me ayudas, ¡eres un crack en MS-DOS! ¡Gracias!
        0
    2. Tartempion
       
      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
    3. Tartempion : le retour
       
      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. cchristian Mensajes publicados 928 Estado Miembro 131
     
    Hola,

    ¿Tu batch lanza otro batch si he entendido bien?

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

    --
    Atentamente.

    Cchristian.
    1
  4. -Shadow-
     
    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
  5. joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro 45
     
    ok, lo intentaré
    0
    1. cchristian Mensajes publicados 928 Estado Miembro 131
       
      Buenas noches,

      Gracias, mantennos informados,
      --
      Atentamente.

      Cchristian.
      0
  6. joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro 45
     
    Era efectivamente eso.
    0
    1. cchristian Mensajes publicados 928 Estado Miembro 131
       
      Hola,

      Gracias por la respuesta,
      --
      Atentamente.

      Cchristian.
      0