Windows コマンドラインで現在の日時を取得してファイル/フォルダ名に適した形式にする
Windowsのコマンドライン上で現在の日時を取得し、ファイル名やフォルダ名に使える適切な形式に変換する方法について説明します。主にバッチファイルでの利用を想定しています。
方法
PowerShellを利用する
PowerShellは柔軟な日付時刻フォーマットを提供します。
@echo off
for /f "tokens=*" %%a in ('PowerShell -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set datetime=%%a
echo %datetime%
Get-Date -Format yyyyMMdd_HHmmss
: 年月日_時分秒の形式で現在の日時を取得します。for /f
ループでPowerShellの出力を変数datetime
に代入します。
wmicコマンドを利用する
wmic
コマンドは、Windows Management Instrumentation (WMI) を使用してシステム情報を取得できます。
@echo off
for /f "tokens=2 delims=:" %%a in ('wmic OS Get LocalDateTime /Format:Table') do set datetime=%%a
set datetime=%datetime:~0,8%_%datetime:~9,2%_%datetime:~11,2%_%datetime:~13,2%_%datetime:~15,2%
echo %datetime%
wmic OS Get LocalDateTime /Format:Table
: ローカル日時をテーブル形式で取得します。for /f
ループで日時部分のみを抽出します。- 文字列操作でYYYYMMDD_HHMMSS形式に変換します。
フォーマットの調整
取得した日時文字列は、必要に応じてさらに加工することができます。
set datetime=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2%
で YYYY-MM-DD 形式に変換set datetime=%datetime:~0,8%
で YYYYMMDD の日付のみ抽出
注意点
- 上記の方法ではタイムゾーンを考慮していません。必要に応じて調整してください。
- ファイル名やフォルダ名に使用する場合、不正な文字が含まれないように注意してください。
- バッチファイルの実行タイミングによって、生成されるファイル名やフォルダ名が重複する可能性があります。
備考
PowerShellの方が柔軟性が高く、一般的に推奨されます。しかし、古いバージョンのWindowsでは利用できない場合があります。
例
@echo off
for /f "tokens=*" %%a in ('PowerShell -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set datetime=%%a
md "Backup_%datetime%"
上記のバッチファイルを実行すると、現在の年月日と時刻を含むフォルダが作成されます。
Windows コマンドラインでの日時取得とファイル名への利用
コード解説
コード例 1: PowerShell を利用した方法
@echo off
for /f "tokens=*" %%a in ('PowerShell -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set datetime=%%a
echo %datetime%
@echo off
: バッチファイル内のコマンドの表示をオフにします。for /f "tokens=*" %%a in ('PowerShell -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set datetime=%%a
:PowerShell -Command "Get-Date -Format yyyyMMdd_HHmmss"
: PowerShell を使って現在の日時を "yyyyMMdd_HHmmss" フォーマットで取得します。for /f "tokens=*" %%a in ('...')
: PowerShell の出力をループ処理し、結果を%%a
変数に代入します。set datetime=%%a
:%%a
の値をdatetime
変数に代入します。
echo %datetime%
:datetime
変数の内容を出力して確認します。
コード例 2: wmic
コマンドを利用した方法
@echo off
for /f "tokens=2 delims=:" %%a in ('wmic OS Get LocalDateTime /Format:Table') do set datetime=%%a
set datetime=%datetime:~0,8%_%datetime:~9,2%_%datetime:~11,2%_%datetime:~13,2%_%datetime:~15,2%
echo %datetime%
@echo off
: 同上。for /f "tokens=2 delims=:" %%a in ('wmic OS Get LocalDateTime /Format:Table') do set datetime=%%a
:for /f "tokens=2 delims=:" %%a in ('...')
: 出力から 2 番目のトークン (日時部分) を抽出し、%%a
変数に代入します。
set datetime=%datetime:~0,8%_%datetime:~9,2%_%datetime:~11,2%_%datetime:~13,2%_%datetime:~15,2%
:datetime
変数の内容を操作して、"yyyyMMdd_HHmmss" フォーマットに変換します。
echo %datetime%
: 同上。
取得した日時文字列は、必要に応じて以下のように加工できます。
- YYYY-MM-DD 形式:
set datetime=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2%
- YYYYMMDD の日付のみ:
set datetime=%datetime:~0,8%
- タイムゾーンは考慮されていません。
- ファイル名やフォルダ名の重複に注意してください。
活用例
@echo off
for /f "tokens=*" %%a in ('PowerShell -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set datetime=%%a
md "Backup_%datetime%"
上記のバッチファイルを実行すると、"Backup_yyyyMMdd_HHmmss" という名前のフォルダが作成されます。
Windows コマンドラインでの日時取得の代替方法
これまで PowerShell と wmic
コマンドを使った方法を紹介しましたが、他にも日時を取得する方法があります。ここでは、いくつかの代替方法を紹介します。
代替方法
VBScript を利用する
VBScript は Windows Script Host で実行できるスクリプト言語です。
@echo off
for /f "tokens=*" %%a in ('cscript /nologo "script.vbs"') do set datetime=%%a
echo %datetime%
script.vbs
ファイルの内容:
Dim objDate
Set objDate = CreateObject("Scripting.FileSystemObject")
Wscript.Echo Format(objDate.Now, "yyyyMMdd_HHmmss")
WScript.Shell オブジェクトを利用する
PowerShell の代わりに WScript.Shell オブジェクトを使うこともできます。
@echo off
for /f "tokens=*" %%a in ('cscript /nologo "script.vbs"') do set datetime=%%a
echo %datetime%
Dim objShell
Set objShell = CreateObject("WScript.Shell")
Wscript.Echo objShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\StandardTime")
ただし、この方法は正確な日時を取得できない可能性があります。
- VBScript や WScript.Shell を利用する場合は、セキュリティ上の考慮が必要な場合があります。
- 上記の例では、日時フォーマットを調整する必要があります。
wmic
コマンドは、一部の環境では利用できない可能性があります。
PowerShell が一般的に推奨されますが、状況に応じて他の方法も検討できます。VBScript は柔軟性が高く、特定の環境で有用な場合があります。ただし、セキュリティやパフォーマンス面での考慮が必要となります。
注意: これらの方法は、主にバッチファイルでの利用を想定しています。他のプログラミング言語を使用する場合は、それぞれの言語固有の方法を利用してください。
例:
@echo off
for /f "tokens=*" %%a in ('cscript /nologo "script.vbs"') do set datetime=%%a
md "Data_%datetime%"
windows datetime batch-file