2016-09-20 1 views
0

J'utilise wmic pour exécuter certaines tâches à distance, mais je ne peux pas forcer l'attente de l'achèvement. Dire par exemple le texte suivant:Attendre que WMIC termine l'appel à distance

wmic process call create "cmd.exe /c ping 127.0.0.1 -n 10 > nul","C:\Data" 

processus wmic se termine, tandis qu'une autre fenêtre cmd dort pendant 10 secondes.

Je veux que le processus wmic attende la fin de la session cmd ouverte (c'est-à-dire qu'il attend 10 secondes dans ce cas). Est-ce possible?

MISE À JOUR: Je cherche une solution non-lot

Répondre

1

script batch suivant pourrait travailler pour vous:

@ECHO OFF >NUL 
SETLOCAL EnableExtensions DisableDelayedExpansion 

REM get the global process identifier 
set "_ProcessId=" 
for /F "tokens=*" %%G in (' 

    wmic process call create "cmd.exe /c ping 127.0.0.1 -n 10 > nul"^,"%temp%"^|find /I "ProcessId" 

') do for /F "tokens=1,2 delims=;= " %%g in ("%%~G") do set "_%%~g=%%~h" 

REM wait while the process is running 
If defined _ProcessId (
    call :waitForEnd 
) else (
    rem debugging output  echo NO process was created 
) 

ENDLOCAL 
goto :eof 

:waitForEnd 
    rem debugging output 
    echo waiting until [%_ProcessId%] terminates %time% 
    rem set appropriate number of seconds to wait in next timeout command 
    >NUL 2>&1 timeout /T 4 /NOBREAK 
    for /F "tokens=1 delims=:" %%G in (' 
     tasklist /FI "PID eq %_ProcessId%" /FO csv /NH 
    ') do if /I NOT [%%G]==[INFO] goto :waitForEnd 
    rem debugging output 
    echo  process [%_ProcessId%] terminated %time% 
goto :eof 

Sortie:

==> D:\bat\SO\39599427.bat 

waiting until [2420] terminates 23:24:52,77 
waiting until [2420] terminates 23:24:56,21 
waiting until [2420] terminates 23:25:00,20 
     process [2420] terminated 23:25:04,22 

==>