Windowsでお馴染みとなったPowerShellで、ファイルの更新日を取得し、前日の日付と一致するか比較する方法をご紹介します。
これにより、当日にファイルの変更がまだ行われていないことを確認します。
PowerShellで実装する理由
実は、わざわざPowerShellを使わずに、Windowsのコマンドプロンプトからでも前日の日付を簡単に取得できると思っていたのですが、ところがどっこい、簡単にはできないんですね。。
「date -1」みたいなのが使えれば簡単で良かったのですが、コマンドから前日の日付を取得しようとすると、何十行ものコードを書かなくてはなりません。
興味のある方は、以下の参考サイトをご覧ください。
月によっては月末が30日だったり31日だったり、また2月の閏年計算なんかも面倒くさすぎて、心が折れそうになります。
今やPowerShellはWindowsに標準搭載されていますので、こんな長ったらしいコードを書かずとも、便利なものは使って行きましょう。
それでは本題です!
前日の日付を取得する
PowerShellでの日付取得方法は「Get-Date」で簡単に実装できます。
加えて、前日や翌日といった「AddDays()」メソッドを使えばすぐに取得できます。
> (Get-Date).AddDays(-1)
2022年5月30日 12:34:56
日数を加算するのAddDaysメソッドの他にも、月単位や年単位で加算するメソッドも用意されていますので、興味のある方はこちらをどうぞ。
ファイルの更新日を取得する
ファイルの情報を取得するために「Get-ItemProperty」を使って、更新日を取得したいファイルのパスを指定します。
そして「LastWriteTime」プロパティでファイルの更新日(タイムスタンプ)を取得します。
> (Get-ItemProperty C:\test.txt).LastWriteTime
2022年5月30日 12:34:56
更新日の他にも作成日なども取得できますので、参考までにこちらをどうぞ。
更新日と前日の日付を比較
さぁ!材料は揃った!
いざ、比較しよう!
…とその前に!
基本、日付は文字列同士の比較になるので、後ろの「時:分:秒」が付いていると、同じ日付でも一致しないと判定されてしまいます。
そこで、先程の2つに「ToString()」メソッドを付けて、お互いの日付を同じ形式にフォーマットしてしまいましょう。
> (Get-Date).AddDays(-1).ToString("yyyyMMdd")
20220530
> (Get-ItemProperty C:\test.txt).LastWriteTime.ToString("yyyyMMdd")
20220530
それでは、いよいよ比較演算子を使ってファイルの更新日が前日の日付かどうか確認してみましょう。
比較演算子の使い方については下記をご参照ください。
完成はこちらです!
ファイルの更新日が前日の日付ならtrue、それ以外ならfalseを返します。
$Yesterday = (Get-Date).AddDays(-1).ToString("yyyyMMdd")
$LastWrite = (Get-ItemProperty C:\test.txt).LastWriteTime.ToString("yyyyMMdd")
if ( $Yesterday -eq $LastWrite ) {
echo true
} else {
echo false
}
以上です。
お疲れ様でした!
- Original:https://minory.org/powershell-yesterday.html
- Source:Minory
- Author:管理者