• 締切済み

DOSコマンドで結果として出力される文字列を変数に格納したい

DOSコマンドで、あるソフト(タスク)が実行されていればプログラムAを、そうでなければプログラムBを実行するバッチを組んでいます。タスクの一覧はtasklistで取得できることが分かり、対象となるタスクおみを抽出する方法も分かりました。しかし、この後どうすれば良いかが分かりません。対象となるタスクが存在した場合としない場合では出力される文字列が違います。この文字列を比較することで分岐が実現できると思ったのですが、それには文字列を変数に格納する必要があります。以下のように記述し、うまくいくことを期待したのですが、駄目でした。 set STATUS=tasklist /fi "Imagename eq タスク名" tasklist /fi "Imagename eq タスク名"の部分が関数であれば、戻り値があってそれを格納することができるのではないかと思ったのですが、できませんでした。このケースに限ったことではありませんが、各コマンドの実行結果として出力される文字列を変数に格納するにはどうすれば良いのでしょうか?VBSやWSHなどではなく、.bat形式の場合でお願いします。

みんなの回答

  • shakunin
  • ベストアンサー率44% (53/118)
回答No.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が実行中だとタスクマネージャが、されていなければメモ帳が開きます。 ただ、変数に格納するという方法は見出せませんでした…

  • shakunin
  • ベストアンサー率44% (53/118)
回答No.2

No.1です。 >リダイレクトでテキストに格納するのはどうやるのでしょうか? tasklist /fi "Imagename eq タスク名" >STATUS.txt >:出力先へ書き出し >>:出力先へ追加書き出し <:入力先から読み込み となります。 先の回答も、もっとスマートに出来るかも知れませんが、とりあえず;

  • shakunin
  • ベストアンサー率44% (53/118)
回答No.1

出力される文字列をリダイレクトでテキストに格納し、さらにサブルーチンに呼び出すというのは如何でしょうか? 例 出力される文字列をSTATUS.txtにリダイレクトしたとして、 copy /b temp1.txt+STATUS.txt+temp2.txt temp.bat call temp.bat del temp.bat temp1.txtの内容:IF temp2.txtの内容: ==(判定文字列) コマンド 要するに、最終的に実行したいステートメントをテキストで生成しておけばいけると思うのですが。

taku17
質問者

補足

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

関連するQ&A

専門家に質問してみよう