• ベストアンサー

バッチ内で、echoがonかoffか判定する方法

m-take0220の回答

回答No.4

> 私の取り出し方、echo %ECHOSTATE%とパイプのfindの組み合わえで ECHOSTATEが「ON」や「OFF」の場合、 echo %ECHOSTATE% は echo ON または echo OFF になるため、ECHOSTATEの内容を表示するのではなくECHOの状態を設定するコマンドと認識されてしまいます。 このような場合は echo.%ECHOSTATE% とするとうまくいきます。 が、私の環境(Windows8.1)では、常にデフォルトの設定が表示されてしまうようです。 findの内部でechoを実行したり、 echo | find "ON" とパイプを使用したりすると、直前にecho offを実行していても「ECHOは <ON> です。」になってしまいます。 ただし、 echo off echo > test.txt とすると、test.txtは「ECHOは <OFF> です。」になります。 リダイレクトとパイプで、動作内容がかわるのもよくわかりません。 ちなみに、 echo.%ECHOSTATE% | find "ON" のようにパイプを使用すると、テンポラリフォルダに一時ファイルを作成して、実行後削除しています。 これが許されるのであれば、 echo > %TEMP%\echostate.txt find "ON" < %TEMP%\echostate.txt <ERRORLEVELで判断> del %TEMP%\echostate.txt でもいいんじゃないかと思います。findじゃなくてforで「ON」や「OFF」を環境変数に取り出すことも可能です。

Donotrely
質問者

補足

そうですか、やはりファイル生成以外にありませんか。 ありがとうございました。 当方もこんなのなんとかなるだろ、と安易に思い、とりかかったのですが、 すぐできるつもりでいたのがなかなかうまく行かず、 ちょくちょく断続的に考え、トータル数時間は首をひねったと思います。 でもできませんでした。

関連するQ&A

  • バッチ(bat)の作り方を教えてください

    今、特定フォルダ内にあるファイル3つが存在すればコマンドを実行し、無ければ4時までループさせるといったことをバッチでしたいと考えております。 イメージは以下の通りです。 D:\a.txt,D:\b.txt,D:\c.txt バッチを1時から動かして、上記3つが揃えば、そこからコマンドを実行しバッチは終了 もしなければ10分置きにファイルをチェックし、4時を過ぎればバッチを終了(コマンドを実行させない)ということをしたいです。 コマンドは何でも良いので例えば「echo HELLO」とでもしておきます。 よろしくお願いいたします。

  • 指定日数経過したファイルをバッチを使って削除する方法

    お世話になります。 今回質問したいのは、あるフォルダ内で作成から5日経過したファイルを削除するバッチの作成方法です。 例えば del /s /q "c:\temp" これを実行するとtempフォルダ内のファイルがサブフォルダを残してすべて削除されます。 これを「作成から5日経過したもののみ」と条件をつけたいのです。 あと、できたら「5日以上アクセスのないもの」という条件もあわせて教えていただければ幸いです。 今回業務の関係で上記処理をバッチでの実行に限定されています。 VBSなどでもできるとは思いますが、バッチコマンドを教えていただければと思います。 わがままを言って申し訳ありませんが、よろしくお願いします。

  • バッチでイベントログ出力したい

    バッチでイベントログ出力したい Windows2003でバッチファイルにてコマンドを実行し、エラーの場合は イベントログに出力したいと考えています。 ERRORLEVELを判定してエラーなら eventcreate /ID 100 /L system /SO Cmd /T ERROR /D "エラーメッセージ" のようにeventcreateコマンドを実行するようにしています。 この"エラーメッセージ"の部分を実際のコマンド実行時のエラーメッセージを 入れ込みたいのですが複数行入れる方法がないか教えてください。 コマンド 2> file.log のようにエラーを出力してそれをfor文で読み込んでいこうとしたのですが 変数に複数行入れることができず、上手くいきません。 何か良い方法があれば教えてください。

  • バッチからSQLCMDを実行する方法

    以下のようなコマンドをバッチファイル(.bat)に記載し、実行しています。(ローカルのsqlserverにwindows認証で入れる事は確認済みです。) !!sqlcmd -E -d database -i c:\sql\a.sql ですが、バッチを実行してもsqlcmdが動作せず、 「'!!sqlcmd'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」 というエラーが発生します。 バッチファイルから、sqlcmdの実行方法をご存知の方、申し訳ありませんがご教示お願いします。

  • バッチファイル

    コマンドプロンプトから実行するコマンド 2つを、100回繰り返したいのですが、 バッチファイルで100回繰り返すにはどうしたらよいでしょうか? 単純にForで出来ると思っていたのですが、 dosのバッチファイルのforはちょっと違うみたいで、ほかの言語のように for(){繰り返したい処理} ということが出来ないみたいで、 しかも変数<100というのも出来ない? ようで(INで0 1 2 3・・・のように指定するのですね・・・?) 戸惑っています。 変数を使ってインデントして100で終了させようと思ったのですが、変数も使えない・・・??のですね。(使えるのでしょうか??) そこでWSHで一セット分のコマンドのバッチファイルを作ってWSHからそれを100回呼ぼうかと思ったのですが、いまいち方法がわかりません。 また、wshの中で直接dosコマンドが使えると最もよいのですが・・・。 詳しい方がいましたら教えていただけると幸いです。

  • バッチファイルの文字判定について

    バッチファイルの文字判定について 以下のような処理をさせたいのですがうまくいきません。 変数Aの中に格納されている文字列の内、 ":"記号が1つでもあった場合→処理実行 ":"記号が1つもなかった場合→goto :eof ディレクトリのパスが納まっているかの確認で、":"を探すようにしました。 あまり良い方法でもないので、ディレクトリのパスが変数に入っているかの確認も、 併せてご教授くだされば幸いです。

  • 削除バッチ方法を教えてください

    Aフォルダの中のあるファイルのみを残し、他のファイルを削除するバッチorDOSコマンドを教えてください? ログファイルを削除するために上記のような仕様でバッチ作成したいのですが、いろいろと調べていますが、わかりません。 ファイル名を見て削除したいと考えています。 ログのファイル形式は、年日付時刻ABCファイルとなり、当日と前日のログだけを残して、他のログを削除したいのですが、、、 宜しくお願いします。

  • 改行しないEcho

    Win7x64コマンドプロンプトでまともに使えるのありますか なるたけ手間かからないのがいいです fechoは-dとかつけるのめんどい バッチかぶせるとどうせ記号とかでおかしくなりますよね

  • コマンドプロンプトのバッチについて

    WindowsのDOSなどのコマンド処理をするバッチファイルについて ですが、DOSからDB(OracleやSQL Serverなど)を起動させるバッチがあって、DBに入ってからSQLのコマンドなどを自動でさせるバッチって 何か方法はないのでしょうか?? DOS → DB起動後、自動でコマンドで動かしたいです。 細かくいうとWindowsのDOSではなくなるので、 動かなくなると思います。

  • バッチ終了時にDOS窓を閉じるコマンド

    自作バッチについて質問があるのですが、 バッチ終了時にDOSプロンプトを自動的に閉じる方法を教えて下さい。 以下の方法は知っているのですが↓ ------------------------------------------------------------ バッチのプロパティ画面の「プログラム終了時にウィンドウを閉じる」を チェックする ------------------------------------------------------------ 上記のようなやり方ではなく、バッチファイルの中に直接コマンドを書いて 設定する方法を教えて下さい。