- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DOSコマンドのループ内のTIMEコマンド
)
DOSコマンドのループ内で時間情報を連続的に表示する方法
このQ&Aのポイント
- DOSコマンドのループ内で異なる時刻を表示する方法を教えてください。
- ループ内で実行するtimeコマンドがすべて同じ時刻になってしまう問題があります。
- ループごとに異なる時刻を表示する方法があれば、教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ループの前に setlocal enabledelayedexpansion と書いておいて、ループの中では %time%の代わりに!time!を使いましょう。
その他の回答 (2)
- redfox63
- ベストアンサー率71% (1325/1856)
回答No.3
#1の回答のようにするか コマンドプロンプトを起動する際に /V:ON を追加して !time!を使ってみましょう
質問者
お礼
そういう方法もあるのですね。 いろいろ勉強になりました。 ありがとうございました。
- OMEGAT
- ベストアンサー率70% (455/642)
回答No.2
forループの中ではforコマンド起動時の時刻しか帰らないようですね。 1つの方法としては、以下のようにcallで飛ばしてやるという方法があります。 @echo start◆%time% @FOR /L %%I IN (0, 1, 3) DO @call :sub @echo end ◆%time% pause @goto :eof :sub @echo %%I【%time%】 @ping localhost -n 2 > nul @exit /b
質問者
お礼
ご提示していただいた方法ですと、 たしかにtimeコマンドは意図通り動くのですが、 subの処理はループと無関係と判断されてしまう為に ループのインデックスの表示は出来ないようです…。 しかし、遅延展開問題の回避方法の1つとして サブルーチン(?)を使えばいいということがわかりました。 またそもそも、DOSバッチにサブルーチンがあることを 知らなかったのでその点でも参考になりました。 ありがとうございました。
お礼
「setlocal enabledelayedexpansion」 これはさっぱり分かりませんでした。なんか長いし。 しかし言われるがままに修正したら意図通りに動きました。 非常にびっくりしました。 とりあえず調べてみたところ、遅延展開云々 という仕様があることをはじめて知りました。 これは経験の差ですね。非常に助かりました。 質問して本当によかったです。 ありがとうございました。