18

日付と時刻の後に文字列をログに出力するスクリプトがあります。

echo %DATE%_%TIME% Processing %%f >> process.log

問題は、日付と時刻が常にスクリプトが開始された日時であるということです。スクリプトを一晩実行しましたが、日付と時刻は同じです。文字列がログファイルに出力される現在の日付と時刻を表示するように更新する方法はありますか?

4

1 に答える 1

38

あなたが持っているという事実%%fはあなたのエコーコマンドがFORループにあることを示しています。FORループ全体が一度に解析され%DATE%、解析時に展開されます。コマンドは反復ごとに再解析されないため、反復ごとに同じ値を取得します。FORステートメントが実行される前に存在していた値を取得します。

解決策は拡張の遅延です。スクリプトsetlocal enableDelayedExpansionの上部近くに配置します。次に、!DATE!_!TIME!の代わりに使用し%DATE%_%TIME%ます。遅延拡張とは、ステートメントが解析されるときではなく、ステートメントが実行されるときに拡張が発生することを意味します。ヘルプシステムには良い説明があります。HELP SETまたはコマンドプロンプトSET /?から入力して、拡張の遅延を扱うセクションを探します。

于 2012-09-21T12:29:10.233 に答える