• ベストアンサー

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

notnotの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.5

一見、 for /f "tokens=2 delims=<>" %%A in ('echo') do set ECHO=%%A で状態がとれそうに思いますが、'echo'のコマンドは、今実行しいているcmd.exeじゃなくて新たに子プロセスとして生成されたcmd.exeで実行されるので、常に初期状態のecho onの状態です。 (余談ですが、仮にこれで取れたとしたら、findとか使う必要なくて、if %ECHO% == OFF でいいです。) >具体的には、コードが実行され、差し込まれた部分に至った段階で、 >offだった場合は、一旦onにして処理が終わったらoffに戻す、 >onだった場合は、on/offについては何もせず処理する、 >あるいはそれらの逆、 全体のECHOの状態に関係なく、ここの部分だけ一時的にECHO ONの状態にしたいとか、ECHO OFFの状態にしたいと言うことですよね? ファイルを作って判定するのが駄目なら、自分でechoするしかないでしょう。 @echo %CD%^>date /t @date /t と書けば、echoの状態に関係なく、 C:\Temp>date 2017/05/20 が表示されます。括弧とか使っていると面倒ですが、出来ない話では無い。 逆の場合だと、単に@をつければいいかと。 あるいは、その部分が独立できる処理なら、別のBATファイルにしておいて、 cmd /c その部分処理.BAT で、そのBATファイル内で独自にECHO状態が設定できます。

Donotrely
質問者

補足

ご回答ありがとうございました。 >cmd.exeじゃなくて新たに子プロセスとして生成されたcmd.exeで実行されるので、常に初期状態のecho onの状態です。 そうですね。二番目の方に補足で「別の世界」と表現したのはそれです。 全てのコマンドに@をつけるというのは、 on/offにかかわらず余分な表示がなくなります。 実際、この問題を考え始めた時の問題はそのケースでした。 しかし、そこで考え始めたのは、 逆の場合も想定し、いかなる場合も対応できる汎用な方法は無いか? でした。 つまり、元々offであってもそこだけonにしたい、 onにした後元の状態に戻しておきたい、そういう場合です。 どこかから持ってきて差し込むような場合など、 内部にon/offがあるかもしれません。 その種の場合も含めて一挙に解決するようなうまい方法は無いか? と思って探し始めました。 そうしたら意外なことにちっともみつからなくて okwavで聞いてみようと思ったのです。 得てしてそういう問題は、 既に議論されてうまい方法が見つかっていたりしますから。

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