Batch - Esperar a que termine un proceso
Resuelto
joujou07
Mensajes publicados
257
Fecha de registro
Estado
Miembro
-
anonyme -
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
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
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
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
Hola,
¿Tu batch lanza otro batch si he entendido bien?
¿Este programa llamado se activa con qué comando, CALL, START.............
--
Atentamente.
Cchristian.
¿Tu batch lanza otro batch si he entendido bien?
¿Este programa llamado se activa con qué comando, CALL, START.............
--
Atentamente.
Cchristian.
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:
@+
Si quieres esperar un poco:
ping localhost > NUL
@+
muchas gracias, lo estaba buscando desde........................
de verdad