プロが教えるわが家の防犯対策術!

DOSコマンドで、あるソフト(タスク)が実行されていればプログラムAを、そうでなければプログラムBを実行するバッチを組んでいます。タスクの一覧はtasklistで取得できることが分かり、対象となるタスクおみを抽出する方法も分かりました。しかし、この後どうすれば良いかが分かりません。対象となるタスクが存在した場合としない場合では出力される文字列が違います。この文字列を比較することで分岐が実現できると思ったのですが、それには文字列を変数に格納する必要があります。以下のように記述し、うまくいくことを期待したのですが、駄目でした。

set STATUS=tasklist /fi "Imagename eq タスク名"

tasklist /fi "Imagename eq タスク名"の部分が関数であれば、戻り値があってそれを格納することができるのではないかと思ったのですが、できませんでした。このケースに限ったことではありませんが、各コマンドの実行結果として出力される文字列を変数に格納するにはどうすれば良いのでしょうか?VBSやWSHなどではなく、.bat形式の場合でお願いします。

A 回答 (3件)

No.1です。


先の回答はクソの役にも立たぬ駄文でした;
tasklistの出力から、どうしても改行を除くことが出来ず、まともに動くバッチを作成出来ませんでした。
混乱を招き、大変申し訳なく思っております。
以下に、少しはましなバッチを考えましたので、ご参考になれば幸いです。

@echo off
tasklist /fi "imagename eq daemon.exe" /nh >d:\temp.txt
find "daemon.exe" <d:\temp.txt >NUL
if errorlevel 1 goto shori1
if errorlevel 0 goto shori0

:shori1
notepad
goto end

:shori0
taskmgr

:end
del d:\temp.txt

DAEMON Toolsが実行中だとタスクマネージャが、されていなければメモ帳が開きます。
ただ、変数に格納するという方法は見出せませんでした…
    • good
    • 0

No.1です。


>リダイレクトでテキストに格納するのはどうやるのでしょうか?

tasklist /fi "Imagename eq タスク名" >STATUS.txt

>:出力先へ書き出し
>>:出力先へ追加書き出し
<:入力先から読み込み

となります。
先の回答も、もっとスマートに出来るかも知れませんが、とりあえず;
    • good
    • 0

出力される文字列をリダイレクトでテキストに格納し、さらにサブルーチンに呼び出すというのは如何でしょうか?




出力される文字列をSTATUS.txtにリダイレクトしたとして、

copy /b temp1.txt+STATUS.txt+temp2.txt temp.bat
call temp.bat
del temp.bat

temp1.txtの内容:IF
temp2.txtの内容: ==(判定文字列) コマンド

要するに、最終的に実行したいステートメントをテキストで生成しておけばいけると思うのですが。

この回答への補足

アドバイスありがとうございます。
それでうまくいけそうな気がします。
更に質問になってしまいますが、リダイレクトでテキストに格納するのはどうやるのでしょうか?

補足日時:2008/12/23 20:36
    • good
    • 0

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