PowerShellで更新日を指定してファイルを抽出

powershell コンピュータ
powershell

ファイルの更新日(LastWriteTime)が任意の日付のファイルを抽出する方法を調べてみました。

PS H:\ps1> Get-ChildItem . | Where-Object { $_.LastWriteTime.Date -eq [DateTime]"2023/10/13" }


    ディレクトリ: H:\ps1


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2023/10/13      9:42              0 さんぷる.txt

サンプルでは、ファイルの更新日が”2023/10/13″のファイルを抽出しています。
$.LastWriteTimeDateTime型ですので比較する場合、同じ型のオブジェクトが必要になります。
方法は色々あるのかもしれませんが、シンプルに文字列をDateTime型にキャストする方法を使います。
DateTime型は時刻を含むのですが、日付を指定する場合時刻は不要ですので$
.LastWriteTime.Dateプロパティで日付を比較するようにしています。(時刻を含めて比較する場合はミリ秒まで指定する必要があるようですので、中々思った通りに動作してくれません。)
二つの日付が-eq演算子で等しいことを確認することで、等しい場合真、そうで無い場合偽が返され、Where-Objectで絞り込まれます。

以上

追記:20250715

期間を指定して拡張子がxlmsのファイルを検索する例

ls *.xlsx | ? { $_.LastWriteTime -ge "2024-01-01" -and $_.LastWriteTime -le "2024-12-31"}

エイリアスなどを使ってなるべく短くなるようにしてみました。
? は Where-Object のエイリアス、ls は Get-ChildItem のエイリアスになります。
また、”2024-01-01″ のような日付文字列は、PowerShell 内部で [datetime] 型に自動変換されるとのことです。

コメント