Windowsバッチファイル

バッチファイルの日付・時刻操作【%DATE%・%TIME%・wmicでタイムスタンプを作る】

Windowsバッチファイル
記事内に広告が含まれています。

バッチファイルで日付・時刻を取得・整形・ファイル名に使う方法を解説します。ログファイルやバックアップフォルダに日時を付けるのはバッチファイルの定番パターンです。

%DATE%と%TIME%で日時を取得する

@echo off
echo 今日の日付: %DATE%
echo 現在時刻:   %TIME%

rem 出力例(日本語環境):
rem 今日の日付: 2026/04/24
rem 現在時刻:   09:30:45.12

注意:%DATE%の形式はWindowsの地域設定によって異なります。日本語環境では 2026/04/24 形式が一般的ですが、英語環境では Fri 04/24/2026 のようになる場合があります。スクリプトを別のPCでも使う場合は事前に確認しましょう。

日付からYYYYMMDD形式を作る

ファイル名に日付を入れるとき、スラッシュや空白が含まれていると問題になります。切り出し(:~)と置換を使って整形します。

@echo off

rem 方法1:切り出しで年月日を個別に取り出す(日本語環境向け)
rem %DATE% = 2026/04/24 の場合
set YEAR=%DATE:~0,4%
set MONTH=%DATE:~5,2%
set DAY=%DATE:~8,2%
set DATE_STR=%YEAR%%MONTH%%DAY%
echo 日付文字列: %DATE_STR%   ← 20260424

rem 方法2:スラッシュを削除して整形
set DATE_STR=%DATE:/=%
echo 日付文字列: %DATE_STR%   ← 20260424(スラッシュが除去される)

rem バックアップフォルダを日付で作る定番パターン
set BACKUP_DIR=D:\backup\%DATE_STR%
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
echo バックアップ先: %BACKUP_DIR%

時刻からHHMMSS形式を作る

%TIME% は 09:30:45.12 の形式ですが、時間が1桁のとき(午前9時台など)はスペースが入ることがあります( 9:30:45.12)。このスペース対策が必要です。

@echo off

rem 時・分・秒を取り出す
set HOUR=%TIME:~0,2%
set MIN=%TIME:~3,2%
set SEC=%TIME:~6,2%

rem 午前9時台にスペースが入る場合の対策(スペースを0に置換)
set HOUR=%HOUR: =0%

set TIME_STR=%HOUR%%MIN%%SEC%
echo 時刻文字列: %TIME_STR%   ← 093045

rem 日時を組み合わせてログファイル名を作る
set LOGFILE=C:\logs\process_%DATE_STR%_%TIME_STR%.log
echo ログファイル: %LOGFILE%
rem → C:\logs\process_20260424_093045.log

wmicコマンドで環境に依存しない日時を取得する

%DATE%は環境によって形式が変わりますが、wmic を使うと常に YYYYMMDDHHmmss 形式で取得できます。複数の環境で動かすバッチファイルにはこちらが安全です。

@echo off

rem wmicで日時を取得(形式: 20260424093045.000000+540)
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do set DATETIME=%%a

rem 年月日時分秒を切り出す
set YYYY=%DATETIME:~0,4%
set MM=%DATETIME:~4,2%
set DD=%DATETIME:~6,2%
set HH=%DATETIME:~8,2%
set NN=%DATETIME:~10,2%
set SS=%DATETIME:~12,2%

echo 現在: %YYYY%年%MM%月%DD%日 %HH%:%NN%:%SS%
set TIMESTAMP=%YYYY%%MM%%DD%_%HH%%NN%%SS%
echo タイムスタンプ: %TIMESTAMP%

まとめ

  • %DATE%と%TIME%で日時を取得できるが、形式はロケール依存に注意
  • :~開始,文字数 の切り出しで年・月・日・時・分・秒を個別に取得できる
  • %DATE:/=% でスラッシュを除去してYYYYMMDD形式を作るのが定番パターン
  • 複数環境で動かすスクリプトにはwmicで取得する方法が安全
  • %HOUR: =0% でスペースを0に置換して1桁の時間に対応する

日付をファイル名に使うバッチを作ったら、午前9時台だけスペースが入ってファイルが作れないバグに遭遇しました。「%HOUR: =0%」でスペースを0に置換する対策を知ってから、日時処理は必ずこのパターンを使うようにしています。

hobbyshift管理人

コメント

タイトルとURLをコピーしました