Windowsバッチで昨日の日付を簡単に取得できる方法はない。
PowerShellを使えば簡単に求められるので、スクリプトの全体をバッチで書いていた場合、PowerShellで呼び出してあげる必要がある。
まず、PowerShellで昨日の日付を求めるのはワンライナーで書ける。
[DateTime]::Today.AddDays(-1).ToString('yyyyMMdd')
これをコマンドラインから実行するには
powershell [DateTime]::Today.AddDays(-1).ToString('yyyyMMdd')
※コマンドラインから実行する場合は、yyyyMMddを囲うのはシングルクォーテーションのみ可能。ダブルクォーテーションを使用していた場合は\でエスケープが必要。
実行結果を変数に入れるにはFOR
コマンドを使用しなければいけない。
※こんなことはできない。
SET yesterday=powershell [DateTime]::Today.AddDays(-1).ToString('yyyyMMdd')
FORコマンドのコマンド実行部(`で囲まれたところ)では、
()等はダブルクォーテーションで囲うか
^`でエスケープが必要となるため、書き方は2通り。
FOR /F "usebackq" %a IN (`powershell [DateTime]::Today.AddDays"("-1")".ToString"("'yyyyMMdd'")"`) DO SET yesterday=%a
あるいは
FOR /F "usebackq" %a IN (`powershell [DateTime]::Today.AddDays^(-1^).ToString^('yyyyMMdd'^)`) DO SET yesterday=%a
FORコマンドの参考:http://www.atmarkit.co.jp/ait/articles/0106/23/news004_2.html
さらにこれをバッチファイルで実行するには%a
が展開されてa
になるので、%
を2つつける必要がある。
FOR /F "usebackq" %%a IN (`powershell [DateTime]::Today.AddDays"("-1")".ToString"("'yyyyMMdd'")"`) DO SET yesterday=%%a
echo %yesterday%
を実行すると以下のように表示される。
20160123