※当サイトは、アフィリエイト広告を利用しPRを含みます。

技術系

batとVBSとPowershellで昨日の日付を取得するまとめ

基盤系のツールをbatで作ってたとき「昨日」の日付を出すのに苦労したのでメモ。

ググるとあっさり出てきたんだけどこれ以外の方法は無いものか。

 

batで昨日を作ると長い

まずはbatで昨日を作ったソースコードを見てみましょう。

:: ----- 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%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %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行で済みます。

コードもわかりやすく、シンプルなので覚えるのも簡単ですね。

 

Date() - 1

または

DateAdd("d",-1,Date)

 

 

▼Wscript.Echoした結果はどちらも同じ。(実行日:2017/12/07)

2017/12/06

 

Powershellも昨日の日付は1行で済むけど覚えにくい

Powershellって汎用性高いんですが、コードが覚えにくいんですよね(個人的な感想です)。

ちょっと見てください。

 

[DateTime]::Today.AddDays(-1)

日付をYYYYMMDD形式にするならさらにこう(大文字小文字注意)

[DateTime]::Today.AddDays(-1).ToString('yyyyMMdd')

 

 

▼実行結果はこう(実行日:2017/12/07)

2017年12月06日 0:00:00

20171206

 

 

まとめ

batってシンプルで便利だけど日付の計算が弱いのでログのローテーションとかには向いてない。

vbsは日付の計算が簡単にできるから便利だけどファイル操作は苦手。

Powershellはなんだかよくわからんけど色々できる。けど直感的にコードを書けない(まだ)。

 

 


社畜系インフラエンジニアブログのTOPへ戻る

コメントもらえたら泣いて喜びます!
  • この記事を書いた人
  • 最新記事
生き残りたいインフラエンジニアのカナデ

kanade

IT関連の仕事に従事し気付けば20余年。好きな言葉は「よくわからないけど動いてる」です。どうにかして生き残りたいアラフォーのIT系エンジニア。

-技術系
-, ,