そこでラベルでtail処理を作成し、CALLで呼び出すことでサブルーチンとして実装している
wuaclt.exeでWindowsUpdateの更新を確認し、そのログにレポートの完了が出力されたら処理終了といった具合のバッチファイルだとこんな感じ
@echo off wuauclt.exe /detectnow /reportnow :LOOP timeout 5 CALL TAIL "%windir%\WindowsUpdate.log" 1 | find "CWERReporter finishing event handling" && GOTO END || GOTO LOOP :TAIL for /F "tokens=1,2,3 USEBACKQ" %%A in (`find /V /C "" %1`) do set FL=%%C set /A TAIL=%FL%-%2 more +%TAIL% %1 exit /b :END echo "Finish."
これを実行すると
0 秒待っています。続行するには何かキーを押してください ... 0 秒待っています。続行するには何かキーを押してください ... 2014-06-17 13:31:26:149 592 2274 Report CWERReporter finishing event handling. (00000000) "Finish."
な感じで正常に動いていることが確認できた
Windows7だとこの方法で実行できたが、Windows Server 2008だと
"バッチ スクリプト外でバッチ ラベルを呼び出すことはできません。"
という感じで怒られてしまった(´・ω・`)
そこで、tail処理は別のスクリプトとして実装してみた
tail.bat
@echo off for /F "tokens=1,2,3 USEBACKQ" %%A in (`find /V /C "" %1`) do set FL=%%C set /A TAIL=%FL%-%2 more +%TAIL% %1
@echo off wuauclt.exe /detectnow /reportnow :LOOP timeout 5 cd /d %~dp0 CALL .\tail.bat "%windir%\WindowsUpdate.log" 1 | find "CWERReporter finishing event handling" && GOTO END || GOTO LOOP :END echo "Finish."
※cd /d %~dp0はこのスクリプトがあるディレクトリへワーキングディレクトリを移動するための処理
0 件のコメント:
コメントを投稿