• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DOSコマンドのループ内のTIMEコマンド )

DOSコマンドのループ内で時間情報を連続的に表示する方法

このQ&Aのポイント
  • DOSコマンドのループ内で異なる時刻を表示する方法を教えてください。
  • ループ内で実行するtimeコマンドがすべて同じ時刻になってしまう問題があります。
  • ループごとに異なる時刻を表示する方法があれば、教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

ループの前に setlocal enabledelayedexpansion と書いておいて、ループの中では %time%の代わりに!time!を使いましょう。

mibusys
質問者

お礼

「setlocal enabledelayedexpansion」 これはさっぱり分かりませんでした。なんか長いし。 しかし言われるがままに修正したら意図通りに動きました。 非常にびっくりしました。 とりあえず調べてみたところ、遅延展開云々 という仕様があることをはじめて知りました。 これは経験の差ですね。非常に助かりました。 質問して本当によかったです。 ありがとうございました。

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

#1の回答のようにするか コマンドプロンプトを起動する際に /V:ON を追加して !time!を使ってみましょう

mibusys
質問者

お礼

そういう方法もあるのですね。 いろいろ勉強になりました。 ありがとうございました。

  • 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

mibusys
質問者

お礼

ご提示していただいた方法ですと、 たしかにtimeコマンドは意図通り動くのですが、 subの処理はループと無関係と判断されてしまう為に ループのインデックスの表示は出来ないようです…。 しかし、遅延展開問題の回避方法の1つとして サブルーチン(?)を使えばいいということがわかりました。 またそもそも、DOSバッチにサブルーチンがあることを 知らなかったのでその点でも参考になりました。 ありがとうございました。

関連するQ&A