1. ホーム
  2. windows

バッチコマンドの日付と時刻をファイル名で表示

2023-09-16 04:12:24

質問

を使ってファイルを圧縮しています。 WinZip を使用してファイルを圧縮しています。私たちは毎日アーカイブを行っているので、これらのファイルに日付と時刻を追加して、毎回新しいものが自動生成されるようにしようとしています。

私は、ファイル名を生成するために以下を使用しています。これをコマンド ラインにコピー ペーストすると、日付と時刻のコンポーネントを持つファイル名が表示されるはずです。

echo Archive_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.zip

出力

Archive_20111011_ 93609.zip

しかし、私の問題は AM PM . AM のタイムスタンプは私に時間を与えてくれます 9 (先頭の空白を含む) vs. 10 が自然に2つの空白を取る。

私の問題は、最初の9日間、最初の9ヶ月間などにも及ぶのでしょうね。

どのようにこれを修正すれば、先頭の空白の代わりに先頭のゼロが含まれるようになり、次のようになります。 Archive_20111011_093609.zip ?

どのように解決するのですか?

別の解決策です。

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I

を与えてくれます(ロケール設定に依存しない!)。

  20130802203023.304000+120
( YYYYMMDDhhmmss.<milliseconds><always 000>+/-<minutes difference to UTC>  )

ここからは、簡単です。

set datetime=%datetime:~0,8%-%datetime:~8,6%
20130802-203023

Loganのリクエストに対して、ファイルの"date-time modified"のために同じoutputformatを提供します。

for %%F in (test.txt) do set file=%%~fF
for /f "tokens=2 delims==" %%I in ('wmic datafile where name^="%file:\=\\%" get lastmodified /format:list') do set datetime=%%I
echo %datetime%

フルパスでのみ動作するため、少し複雑です。 wmic はバックスラッシュが二重になることを期待し = はエスケープされなければなりません (最初のもの。2番目のものは周囲の引用符で保護されています)。