電子書籍の厳選無料作品が豊富!

バッチ初心者です。ご教授下さい。

処理としては、特定のプロセスが存在すれば、再度5秒後にチェックして存在すればOKと表示。
としたいのですが。項番08で「0 の使い方が誤っています。」で落ちてしまいます。

ただ再チェックの項番13~20を外せば通ります。
XPで動かしています。
何が間違っているのでしょうか。宜しくお願いします。

01 @echo off
02 set tasktmp=C:\Temp\cnttmp.txt
03 set vbstmp=C:\Temp\vbstmp.vbs
04
05 tasklist | find /c "【何かプロセス】" > %tasktmp%
06 for /f %%a in (' type %tasktmp% ') do set cnttmp=%%a
07
08 if %cnttmp% neq 0 (
09
10 echo WScript.Sleep 5000 > %vbstmp%
11 cscript //NoLogo %vbstmp%
12
13 tasklist | find /c "【上と同じプロセス】" > %tasktmp%
14 for /f %%a in (' type %tasktmp% ') do set cnttmp=%%a
15
16 if %cnttmp% neq 0 (
17
18 echo OK
19
20 )
21 del %vbstmp%
22
23 )
24 del %tasktmp%
25 exit

A 回答 (1件)

0の使い方が誤っていますというのはC:\Temp\cnttmp.txtの中身が想定外の物になっているのだと思います。

バッチファイルの多重起動などで同じファイルに同時にアクセスしてませんか?


解決策ですが、文字列を含む行数との比較ではなく、
文字列を検索した結果のerrorlevelをみてはどうでしょうか。
中間ファイルを作らなくてよくなります。

05 tasklist | find /c "【何かプロセス】" > %tasktmp%
06 for /f %%a in (' type %tasktmp% ') do set cnttmp=%%a
07
08 if %cnttmp% neq 0 (
 ↓
tasklist |find "何かのプロセス" > NUL
if errorlevel 1 goto skip
echo WSciript.Sleep 5000 > %vbstmp%

:skip
exit
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

errorlevel,goto で分枝させることで解決しました。
中間ファイルもなくなりシンプルに纏めることができました。

改めて見ると、ヘルプを見て解決できそうな質問でしたね。
恥ずかしい限りです。

ありがとうございました。

お礼日時:2008/09/14 13:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!