日付を整形する Windows バッチ

Windows バッチ環境で日付や時刻を処理するサンプルコードを紹介します。日付や時刻なんて簡単に処理できるのでは?と思うかもしれませんが、はるか 1990年代に設計された バッチ、実は簡単にはできません。今はWindowsではデフォルトは Powershell のため、バッチは古い仕様のまま放置されているようです。

YY
MM
DD
hh
mm
ss

バッチ

本日の日付を YYYYMMDD で整形する方法を紹介します。
(*)%a は for 文で明示的に宣言され、%b と %c は tokens= オプションで暗黙的に宣言されています。

サンプル:


@echo off
rem 本日の日付を YYYYMMDD で整形する
for /f "tokens=1-3 delims=/" %%a in ("%date%") do echo %%a%%b%%c

実行例:


20181028



本日の日付と時刻を YYYYMMDD-hhmmss で整形する方法を紹介します。



サンプル:


@echo off
rem 本日の日付を YYYYMMDD hhmmssで整形する
for /f "tokens=1-7 delims=/:." %%a in ("%date%:%time%") do set /a x=%%a%%b%%c,y=%%d+100,z=1%%e%%f%%g
echo %x%-%y:~-2%%z:~-6%

実行例:


20181028-22362381



c:\temp に本日の日付のフォルダを作成し、その中に YYYYMMDDhhmmss.txt というファイルを作成します。
運用でログを生成する場合などに活用できます。

サンプル:


@echo off
for /f "tokens=1-7 delims=/:." %%a in ("%date%:%time%") do (
set /a x=%%a%%b%%c,y=%%d+100,z=1%%e%%f%%g
set /a i=%%a%,j=%%b%,k=%%c%
)
mkdir c:\temp\%x%
echo test>c:\temp\%x%\%x%-%y:~-2%%z:~-6%.txt




曜日を取得するサンプルです。2000年以後を想定しています。

Windows バッチには純粋には曜日を計算する機能はなさそでした。ツェラーの公式を使用して計算しています。

日曜日・・・1
月曜日・・・2
火曜日・・・3
水曜日・・・4
木曜日・・・5
金曜日・・・6
土曜日・・・7

(*)日曜日=1 を基準として表示される。

サンプル:


@echo off
@rem 西暦の下二桁を取得
set /A YYYY=%DATE:~0,4% * 1

@rem 月を取得
set /A MM=%DATE:~5,2% * 1

@rem 日を取得
set /A DD=%DATE:~8,2% * 1

@rem 1月か2月なら年数を引いて月に12を足す ("ツェラーの公式"により 1月と2月は、前年のそれぞれ13月、14月として扱うため)

if %MM% LEQ 2 (
set /A YYYY=%YYYY% - 1
set /A MM=%MM% + 12
)

set /A YOUBI=(%YYYY% + %YYYY% / 4 - %YYYY% / 100 + %YYYY% / 400 + (13 * %MM% + 8) / 5 + %DD%) %% 7

set /A YOUBI=YOUBI

@echo %YOUBI%

実行例:


1



昨日の日付を求めるサンプルコードです。
色々と方法はあるとは思いますが、Windows バッチ機能では難しいので vbscript の機能を借りています。
%temp%temp.vbs というテキストファイルを生成し、そこで昨日の日付を取得しています。そして計算後にこのファイルを削除しています。
日付のみなら dd に値が格納されています。

サンプル:


@echo off
rem 昨日の日付を取得するサンプルコード
set day=-1
echo >"%temp%\temp.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\temp.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\temp.vbs"') do set "yesterday=%%a"
del %temp%\temp.vbs
set yyyy=%yesterday:~0,4%
set mm=%yesterday:~4,2%
set dd=%yesterday:~6,2%
set answer=%yyyy%-%mm%-%dd%

echo %answer%

実行例:


C:\temp>test.bat
2018-09-30

C:\temp>date
現在の日付: 2018/10/01


コマンドサンプル一覧