ファイルの更新日(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″のファイルを抽出しています。
$.LastWriteTimeはDateTime
型ですので比較する場合、同じ型のオブジェクトが必要になります。
方法は色々あるのかもしれませんが、シンプルに文字列を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] 型に自動変換されるとのことです。
コメント