日付と時刻の取得
バッチファイルでログファイルを作成したり、バックアップフォルダに日付を付けたりする際、現在の日付や時刻を取得する方法を知っておくと非常に便利です。
この記事では、%DATE% と %TIME% の使い方から、ファイル名への活用方法まで解説します。
日付を取得する(%DATE%)
%DATE% 環境変数を使用すると、現在の日付を取得できます。
echo %DATE%
%DATE% の出力形式は Windows の地域設定によって異なります。日本語環境では一般的に YYYY/MM/DD
の形式ですが、環境によっては曜日が含まれる場合(例: 火 2026/03/11)もあります。
時刻を取得する(%TIME%)
%TIME% 環境変数を使用すると、現在の時刻を取得できます。
echo %TIME%
%TIME% は HH:MM:SS.mm
の形式で表示されます。午前の時間帯では先頭にスペースが入る場合があります(例: 9:05:30.12)。
日付からファイル名に使える文字列を作成する
ファイル名にはスラッシュ / やコロン : を使用できないため、日付・時刻からこれらの文字を取り除く必要があります。
日付を YYYYMMDD 形式にする
@echo off
setlocal
rem %DATE% が YYYY/MM/DD 形式の場合
set YYYY=%DATE:~0,4%
set MM=%DATE:~5,2%
set DD=%DATE:~8,2%
set TODAY=%YYYY%%MM%%DD%
echo 今日の日付: %TODAY%
endlocal
時刻を HHMMSS 形式にする
@echo off
setlocal
rem 時刻の先頭スペースを0に置換
set HOUR=%TIME:~0,2%
set HOUR=%HOUR: =0%
set MIN=%TIME:~3,2%
set SEC=%TIME:~6,2%
set NOW=%HOUR%%MIN%%SEC%
echo 現在時刻: %NOW%
endlocal
%TIME% の時間部分が 1 桁の場合(午前 9 時台など)、先頭にスペースが含まれます。set HOUR=%HOUR: =0% でスペースを 0 に置換することで、常に 2 桁の表示になります。
日付・時刻をファイル名に使用する
タイムスタンプ付きバックアップ
@echo off
setlocal
set YYYY=%DATE:~0,4%
set MM=%DATE:~5,2%
set DD=%DATE:~8,2%
set TIMESTAMP=%YYYY%%MM%%DD%
set BACKUP_DIR=D:\Backup\%TIMESTAMP%
mkdir "%BACKUP_DIR%" 2>nul
xcopy "C:\Users\user\Documents\*.*" "%BACKUP_DIR%\" /E /Y >nul
echo バックアップ先: %BACKUP_DIR%
echo バックアップが完了しました。
endlocal
タイムスタンプ付きログファイル
@echo off
setlocal
set YYYY=%DATE:~0,4%
set MM=%DATE:~5,2%
set DD=%DATE:~8,2%
set LOGFILE=C:\Logs\process_%YYYY%%MM%%DD%.log
echo %DATE% %TIME% - 処理を開始しました。 >> "%LOGFILE%"
rem 処理内容...
echo %DATE% %TIME% - ファイルをコピーしました。 >> "%LOGFILE%"
echo %DATE% %TIME% - 処理を完了しました。 >> "%LOGFILE%"
echo ログファイル: %LOGFILE%
endlocal
より確実な日付取得方法(wmic を使用)
%DATE% は地域設定に依存するため、環境によって異なるフォーマットになる場合があります。より確実に日付を取得するには、wmic コマンドを使用する方法があります。
@echo off
setlocal
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set DATETIME=%%I
set YYYY=%DATETIME:~0,4%
set MM=%DATETIME:~4,2%
set DD=%DATETIME:~6,2%
set HH=%DATETIME:~8,2%
set MIN=%DATETIME:~10,2%
set SS=%DATETIME:~12,2%
echo 日付: %YYYY%/%MM%/%DD%
echo 時刻: %HH%:%MIN%:%SS%
echo ファイル名用: %YYYY%%MM%%DD%_%HH%%MIN%%SS%
endlocal
Windows の新しいバージョンでは wmic が非推奨になっています。代替として PowerShell
を利用する方法もあります:for /f %%I in ('powershell -command "Get-Date -Format yyyyMMdd"') do set TODAY=%%I
実践例:古いファイルの自動削除
30 日以上前のバックアップファイルを削除するバッチファイルの例です。
@echo off
setlocal
set BACKUP_DIR=D:\Backup\Logs
set DAYS=30
echo %DAYS% 日以上前のファイルを削除します。
forfiles /P "%BACKUP_DIR%" /S /M *.log /D -%DAYS% /C "cmd /c echo 削除: @path && del @path" 2>nul
echo クリーンアップが完了しました。
endlocal
forfiles コマンドは、ファイルの更新日時に基づいてファイルを選択・処理するコマンドです。/D -30
で 30 日以上前のファイルを対象にできます。
まとめ
| 操作 | 方法 |
|---|---|
| 日付を取得 | %DATE% |
| 時刻を取得 | %TIME% |
| YYYYMMDD 形式 | %DATE:~0,4%%DATE:~5,2%%DATE:~8,2% |
| 環境非依存の日付取得 | wmic os get localdatetime |