3

バッチ ファイルで発生しているイベントのタイムスタンプを含むログ ファイルを作成しようとしています。

以下のコードからわかるように、バッチ ファイルの作成に関しては、私は専門家ではありません。技術は非常に貧弱ですが、プロセスは正常に機能します。バッチ ファイル自体が削除されないようにするために、読み取り専用に設定しました。ある時点で、バッチ ファイルを除外する方法を考え出します。今のところ、それはそれほど重要ではありません。

@echo off
echo Compressing Files...
echo Compression Batch File STARTED: %date% %time% >> c:\temp\backup-compress.log
echo --------------------------------------------- >> c:\temp\backup-compress.log
for %%X in (*) do ( 
    "c:\Program Files\7-Zip\7z.exe" a -tgzip "%%X.gz" "%%X"
    echo %%X Compressed: %date% %time:~-11,8% >> c:\temp\backup-compress.log
    echo Deleting: %%X
    del "%%X"
    echo %%X Deleted: %date% %time:~-11,8% >> c:\temp\backup-compress.log
    )
echo Moving compressed copies to Compressed Backups folder...
move *.gz "Compressed Backups\" > NUL
echo --------------------------------------------- >> c:\temp\backup-compress.log
echo Compression Batch File FINSHED: %date% %time% >> c:\temp\backup-compress.log
echo Compression completed successfully...
echo

結果として得られるログ ファイルは、希望どおりに見えますが、タイム スタンプと日付はログ全体で一定のままです。バッチ ファイルでイベントが発生するとタイム スタンプが更新されるのではなく、すべての %time% および %date% インスタンスの代わりに、バッチ ファイルが開始された時刻と日付のみが表示されます。

この問題を修正し、作成中のログ ファイルの正しい時刻と日付のスタンプを表示するにはどうすればよいですか?

PS: この投稿が長くなったことと、簡単に解決できる問題であることをお許しください。また、タグが正しくない場合は、申し訳ありませんが、実際に質問を投稿するのはこれが初めてですが、サイトは常に回答のための優れたリソースでした.

4

2 に答える 2

4

これは、ステートメントが実行の直前ではなく解析されるcmdときに変数を展開するためです。この場合のステートメントは、その後のブロックを含む完全なものです。したがって、ループ内に残るのはリテラル文字列であり、変数はありません。forfor

遅延拡張を使用して問題を修正できます。バッチの開始時に次のように入力します。

setlocal enabledelayedexpansion

次に、ループ内でを使用!date!します。!time!これにより、ステートメントを実行する直前に変数が展開されるため、意図したとおりに機能します。

于 2012-07-10T21:24:37.167 に答える
0

ミリ秒は気にしないので、適切な時間を取得するために少し異なる方法を使用します。

私はこのように時間を設定しました:

FOR /F %%A IN ('TIME/T') DO SET timeEdit=%%A
ECHO %timeEdit%

このようにして、希望どおりに時間を取得します。唯一の欠点は、これが setlocal メソッドよりも少し長いことです。システムからリアルタイムで時間をキャプチャするのではなく、時間の変数をハード設定しているため、複数回キャプチャする場合は両方の行が必要になります。

于 2013-11-15T16:59:16.813 に答える