• 締切済み

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

  • コマンドの実行結果を変数に格納いしたい。

    有るプログラムへ特定ディレクトリのファイル数を渡す必要があり、バッチファイルを書いてますが、うまく行きません。 アドバイスを頂けましたら幸いです。 コマンドの実行欠課を変数に格納する方法を調べており、FOR文を使う事は分かったのですが、パイプを使った処理がうまく行きません。 ◎実行したいコマンド DIR /B | FIND /C /V "log” ◎バッチファイル @ECHO OFF for /f "usebackq tokens=*" %%i in (`DIR /B | FIND /C /V "log"`) do @set RESULT=%%i echo %RESULT% @ECHO ON パイプを使わず、単純なコマンドだと正常に変数に格納されますので、パイプでFINDに渡している事がだめだと思っております。 こういった場合、どう書けばよいかお教えください。

  • 変数内のコマンドの実行コマンド文字列の表示

    変数内のコマンドの実行コマンド文字列の表示 DIG=`dig ドメイン` として変数内のコマンド実行結果を printf "$DIG\n"と表示させることはできるのですが、 実際に実行したコマンドを表示させることはできますでしょうか。 逆に DIG="dig ドメイン" として文字列をセットすればコマンド内容は表示されますが、 今度はコマンドとして実行させる方法がわかりません。 `$DIG`としてもprintf "$DIG\n"などいろいろ試しましたが わかりません。。 どなたかおわかりでしょうか

  • コマンドを実行してコマンドライン文字列を読み込む

    C言語(他の言語でも)で、コマンドを実行して結果の文字列を取得できるような関数はないでしょうか? コマンドを実行したプログラム内の変数に文字列として保持して、処理したいと考えています。 Windowsです。 よろしくお願い致します。

  • bashで出力を変数に格納したい。

    初歩的な質問で申し訳ありません。 bashで、あるプログラムの出力の一部を変数に格納したいのですが、どのようにすればよいのでしょうか? 例えば、 >>./test.exe this is a pen. という実行ファイルがあるときに。 isのみを、変数 a に格納する。と言ったものです。 >>echo ${a} is

  • 定期的に起動アプリを終了させるbatファイル

    定期的にある一つの起動しているアプリを強制終了させるbatファイルを作成したいと思っています。 OSはServer2003です. tasklist /FI "IMAGENAME eq xxx.EXE"|find "xxx.EXE" にて値が返された場合はtaskkillコマンドで終了させ 値が無い場合は何もしないと言ったbatファイルを作成 したいのです。出力値をどこかに格納して、空であれば 何もせず、値があればtaskkillを実行してと言った感じにしたいのですが、その部分をどうしていいのか今調べております。何かいいアドバイス等ございましたらよろしくお願いします。不明点があればよろしくお願いします。

  • コマンド(例えばls)の出力結果を文字列で取得するプログラムの作成方法

    はじめまして。 Linux(ディストリビューションは問わず)で コマンド(例えばlsコマンド)を実行して その出力結果を文字列で取得するプログラムを作成したいです。 コマンドの実行はsystem()で可能なのかな?と思っていますが、 コンソールに出力される内容はどのように取得して良いのか分かりません。 詳しい方がおりましたらご教授お願い致します。

  • 【DOSコマンド】一致した文字列の次の単語を出力

    コマンドの実行結果の標準出力をリダイレクトしてテキストファイルに書き出しました。 このファイルを検索し、マッチした文字列の次の単語を出力したいのですが、 標準のDOSコマンド(あるいはコマンドラインで動作するフリーソフトを使用するのでも構いません)で実現するにはどうすれば良いでしょうか? テキストファイルの内容例 hogehoge: abcdefg この場合、abcdefgを出力したいです。 hogehogeは大文字小文字入り交じっています。

  • コマンドの結果を変数に入れたい

    現在のホスト名をhostnameコマンドで表示させられますが、この結果を変数に格納することはできますか? set PCName=hostname set PCName=%hostname% と実行しても、上手くいきませんでした。 理由は、ホストネームはよく利用するので、変数に格納したいからです。 毎回、hostnameコマンドを実行し、マウスで範囲を選択し、コピー&ペーストでやって来ましたが、もう少し効率よく出来ればよいなと思い質問させていただきました。 分かる方いらっしゃいましたら、お願いいたします。

  • 変数に格納している文字列の読み込み

    ある変数($text)にHTMLデータが格納されています。 その変数内の文字列を、1行ずつ読み込む方法はあるのでしょうか。 $textをファイルに変換して読み込むべきでしょうか。 ぞ存知の方、ご教授をお願いします。

    • ベストアンサー
    • PHP
  • VB2010 変数に格納する文字列を増やす

    単純なことなのですが、、、どうしても方法が思い浮かびません。 下記のプログラムでは2735回変数にDataGridの値を格納 していますが、本来行いたい処理は Dataの中に2735回出た結果を文字列として連結したいです。 (たとえば..1回目でA 2回目でBと出た場合、DataにAB) 方法をご教授下さい。 For Row=0 To 2734 Data=Me.DataGridView1(CC,Row).Value Next