電子書籍の厳選無料作品が豊富!

下記は、6秒待って時刻を表示するのを繰り返す記述ですが、
「開始」の時間と「終了」の時間が同じになってしまいます。

【コード】
--------------------------------------------------
:flg_check
if exist %FlgFile% (
echo %time% 開始
echo WScript.Sleep 6000 > %TmpFile%
cscript //NoLogo %TmpFile%
echo %time% 終了
goto flg_check
)
--------------------------------------------------
【結果】
--------------------------------------------------
10:26:14.30 開始
10:26:14.30 終了
10:26:20.41 開始
10:26:20.41 終了
--------------------------------------------------

開始時刻の6秒後の時刻が終了時刻にならないのですが、なぜでしょうか?

A 回答 (2件)

setlocal ENABLEDELAYEDEXPANSION


は、setlocalという内部コマンドを、ENABLEDELAYEDEXPANSION という引数付きで
実行することです。

このことにより環境変数の値が勝手に変わることはありません。
%環境変数%の他に、!環境変数!と書いたときも
環境変数の内容の展開を行うようになり、
そのタイミングが、バッチファイルの読み込み時ではなく
その行実行時に行われるということだけです。

詳しくは
setlocal /?
ででてくるヘルプを参照してください。
    • good
    • 1
この回答へのお礼

そういうことだったのですね。
ご教授ありがとうございました。
勉強になりました。

お礼日時:2007/08/22 18:59

%time% の時刻文字列への展開のタイミングが、


それぞれの行へ到達した時点ではなく、
()ないのサブテキストが読み込まれた時点で一度に行われてしまうために、これら二つの内容が同じになってしまいます。

これを避け、希望の結果を得るには
バッチファイルの先頭または@echo off行の後に
setlocal ENABLEDELAYEDEXPANSION
という行を追加し、

> echo %time% 終了
この行を
> echo !time! 終了

のように変更します。
詳しくは
set /?
cmd /?
あるいは cmd.exe 遅延評価 環境変数
といったキーワードの組み合わせで検索してみてください。
    • good
    • 0
この回答へのお礼

sakusaker7さん
回答ありがとうございます。

setlocal ENABLEDELAYEDEXPANSION について質問させてください。

これは、環境変数の値を変更するということですか?
この設定をすることでdefault値が変わる等はないでしょうか?

お礼日時:2007/08/22 12:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!