いくつかのプログラムを実行するバッチ スクリプトを作成しています。各プログラムが処理を終了すると、ユーザーがそのプログラムを閉じるか、次のプログラムに進むか、数秒のタイムアウト後に taskkill によって閉じられるのを待ちます。メインスクリプトをMAIN、プログラムをTASK、タイマーをKILLERと考えれば。MAIN は TASK と KILLER を (ほぼ) 同時に開始します。TASK は本来の処理を実行し、KILLER は 600 秒待ってから TASK を強制終了します。ただし、TASK がユーザーによって閉じられた場合は、KILLER を強制終了し、ユーザーの操作なしで MAIN に戻る必要があります。ただし、pingまたはタイムアウトを使用すると、バッチが実際に閉じる前に、タイマーが期限切れになるまで待つ必要があります。何もしないコマンド ウィンドウでデスクトップを散らかしたくありません。これを回避する方法はありますか?
1326 次
2 に答える
0
このようなものを使用できます
@echo off
setlocal enableextensions disabledelayedexpansion
start "" task.exe
call :timeoutProcess "task.exe" 300
start "" task.exe
call :timeoutProcess "task.exe" 300
exit /b
:timeoutProcess process timeout [leave]
rem process = name of process to monitor
rem timeout = timeout in seconds to wait for process to end
rem leave = 1 if process should not be killed on timeout
for /l %%t in (1 1 %~2) do (
timeout /t 1 >nul
tasklist | find /i "%~1" >nul || exit /b 0
)
if not "%~3"=="1" taskkill /f /im "%~1" >nul 2>nul
if %errorlevel% equ 128 ( exit /b 0 ) else ( exit /b 1 )
タイムアウト ロジックは、プロセスが終了するかタイムアウトに達するまで待機するサブルーチンに移動されます。
于 2014-10-24T18:57:53.783 に答える
0
これが vbs スクリプトです。
プログラムが終了するまで待機し、メモ帳であるかどうかを確認し、メモ帳である場合は再起動します。プログラムの開始、またはすべての開始と停止の場合は に変更Win32_ProcessStopTraceします。Win32_ProcessStartTraceWin32_ProcessTrace
コンソール スクリプトはこのように開始されます。GUI スクリプトは、スクリプトを直接実行するだけです。GUI スクリプトは非表示です。
cscript "c:\somefolder\script.vbs"
スクリプトで待機するにはwscript.sleep 600000(ミリ秒)。
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM Win32_ProcessStopTrace")
Do
Set objReceivedEvent = objEvents.NextEvent
wscript.echo objReceivedEvent.ProcessName
If lcase(objReceivedEvent.ProcessName) = lcase("Notepad.exe") then
WScript.echo "Process exited with exit code " & objReceivedEvent.ExitStatus
WshShell.Run "c:\Windows\notepad.exe", 1, false
End If
Loop
これは、非表示のコマンド ウィンドウを起動する方法です。
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd /k dir c:\windows\*.*", 0, false
于 2014-10-24T19:45:04.677 に答える