日付と時刻の取得

にメンテナンス済み

バッチファイルでログファイルを作成したり、バックアップフォルダに日付を付けたりする際、現在の日付や時刻を取得する方法を知っておくと非常に便利です。

この記事では、%DATE% と %TIME% の使い方から、ファイル名への活用方法まで解説します。

先に結論です。地域設定に左右されず 20261010_143045 のような文字列を得るには、PowerShell を呼び出す次の方法が最も確実です。

for /f %%I in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set STAMP=%%I

%DATE% を加工する方法は手軽ですが、日本語の既定の地域設定(YYYY/MM/DD)を前提にしています。

日付を取得する(%DATE%)

%DATE% 環境変数を使用すると、現在の日付を取得できます。

echo %DATE%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %DATE%
2026/03/11
C:\users\user>
%DATE% のフォーマットについて

%DATE% の出力形式は Windows の地域設定によって異なります。日本語環境では一般的に YYYY/MM/DD の形式ですが、環境によっては曜日が含まれる場合(例: 水 2026/03/11)もあります。

時刻を取得する(%TIME%)

%TIME% 環境変数を使用すると、現在の時刻を取得できます。

echo %TIME%
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>echo %TIME%
14:30:45.23
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

%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
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>dateformat.cmd
今日の日付: 20260311
C:\users\user>

時刻を 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
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>timeformat.cmd
現在時刻: 143045
C:\users\user>
チェック

%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
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>backup_with_date.cmd
バックアップ先: D:\Backup\20260311
バックアップが完了しました。
C:\users\user>

タイムスタンプ付きログファイル

@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

地域設定に依存しない日付取得方法

%DATE% は地域設定に依存するため、他の PC に配布するバッチファイルでは別の方法を使うほうが安全です。

PowerShell を使う(推奨)

Get-Date -Format で書式を直接指定できるため、文字列の切り出しが不要です。

@echo off
setlocal

for /f %%I in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set STAMP=%%I

echo ファイル名用: %STAMP%

endlocal
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>psdate.cmd
ファイル名用: 20261010_143045
C:\users\user>

PowerShell の起動に 0.5 秒前後かかるため、ループ内で何度も呼び出すのは避け、最初に 1 回だけ取得して使い回してください。

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%_%HH%%MIN%%SS%

endlocal
wmic は新しい Windows では使えない場合があります

wmic コマンドは非推奨となっており、Windows 11 24H2 以降では既定で無効(オプション機能扱い)となり、今後削除される予定です。新しく作成するバッチファイルでは PowerShell を使う方法を選んでください。

実践例:古いファイルの自動削除

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 日以上前のファイルを対象にできます。/S はサブフォルダーも対象にします。削除系の処理は、最初に del @path を echo @path に置き換えて、対象を確認してから実行してください。

まとめ

操作方法
日付を取得%DATE%
時刻を取得%TIME%
YYYYMMDD 形式%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
環境非依存の日付取得powershell -Command "Get-Date -Format yyyyMMdd"

関連記事

練習問題

練習問題

%DATE% 環境変数について正しい説明はどれですか?

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #日付 #時刻 #ログ