黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

なかなか終わらない処理を我慢できずにkillするbatファイル

この記事はコマンドプロンプト(cmd.exe) Advent Calendar 2015 17日目の記事です。
16日目の記事は@kunst1080さんコマンドプロンプトのワンライナーでMessageBoxを表示する3つの方法でした!

使いどころあるのかどうかわからないし、どうにも不味いやり方をしているかもしれませんが、やりたいことは以下の通りです。

  • バッチファイルの前段で(startコマンドなんかで呼び出された)処理がなかなか終わらない。
  • 要件として1時間以内に終わらなければ処理を中止して異常終了として扱いたい。

dosにだっていろいろなコマンドがあるのです!

set num=1

:LOOP
rem 5秒待ってから
timeout /t 5

rem ryoana.exeが動いているか確認
rem findstrは引数の文字列が見つからない場合1を返す
tasklist | findstr ryoana.exe
if %ERRORLEVEL% EQU 1 goto END

rem 時間切れならERRORへ
rem 範囲内であれば1足してLOOPをもう一回
if %num% EQU 720 goto ERROR
set /A num+=1
goto LOOP

:ERROR
taskkill /F /IM ryoana.exe
exit 1

:END
exit 0

わざわざENDERRORを用意する必要ない気がするけど、個人的にはこっちが見やすい(あくまで個人的)

18日目の記事はまたも@kunst1080さんです!めちゃ書いててすごい。