基盤系のツールをbatで作ってたとき「昨日」の日付を出すのに苦労したのでメモ。
ググるとあっさり出てきたんだけどこれ以外の方法は無いものか。
batで昨日を作ると長い
まずはbatで昨日を作ったソースコードを見てみましょう。
1234567891011121314151617181920212223242526272829303132 :: ----- prevdate.bat はじめ -----@echo off::今日の日付を取得set yy=%date:~0,4%set mm=%date:~5,2%set dd=%date:~8,2%echo 今日は、%yy%年%mm%月%dd%日です。::1日前の日付を計算するset /a dd=%dd%-1set dd=00%dd%set dd=%dd:~-2%set /a ymod=%yy% %% 4if %dd%==00 (if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)if %mm%==02 (set mm=01&& set dd=31)if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))if %mm%==04 (set mm=03&& set dd=31)if %mm%==05 (set mm=04&& set dd=30)if %mm%==06 (set mm=05&& set dd=31)if %mm%==07 (set mm=06&& set dd=30)if %mm%==08 (set mm=07&& set dd=31)if %mm%==09 (set mm=08&& set dd=31)if %mm%==10 (set mm=09&& set dd=30)if %mm%==11 (set mm=10&& set dd=31)if %mm%==12 (set mm=11&& set dd=30))echo 昨日は、%yy%年%mm%月%dd%日です。echo.pause:: ----- prevdate.bat おわり -----
参考:atmarkIT
batは日付の計算が苦手です。
1桁の日付(ゼロサプレスされている)場合0:ゼロを先頭に入れて置換したり、月末の計算したりうるう年計算したりetc…
▼実行結果(実行日:2017/12/07)
今日は、2017年12月07日です。
昨日は、2017年12月06日です。
続行するには何かキーを押してください . . .
VBSで昨日を作ると1行で済む
対してVBSで昨日を作ると1行で済みます。
コードもわかりやすく、シンプルなので覚えるのも簡単ですね。
1 |
Date() - 1 |
または
1 |
DateAdd("d",-1,Date) |
▼Wscript.Echoした結果はどちらも同じ。(実行日:2017/12/07)
2017/12/06
Powershellも昨日の日付は1行で済むけど覚えにくい
Powershellって汎用性高いんですが、コードが覚えにくいんですよね(個人的な感想です)。
ちょっと見てください。
1 |
[DateTime]::Today.AddDays(-1) |
日付をYYYYMMDD形式にするならさらにこう(大文字小文字注意)
1 |
[DateTime]::Today.AddDays(-1).ToString('yyyyMMdd') |
▼実行結果はこう(実行日:2017/12/07)
2017年12月06日 0:00:00
20171206
まとめ
batってシンプルで便利だけど日付の計算が弱いのでログのローテーションとかには向いてない。
vbsは日付の計算が簡単にできるから便利だけどファイル操作は苦手。
Powershellはなんだかよくわからんけど色々できる。けど直感的にコードを書けない(まだ)。