Get-ItemProperty日付を指定してファイル抽出


アニメ『学園ベビーシッターズ』

ベビーシッターの話で、面白いんだろうと思ってたんですが、意外に子供たちに癒されます。特に虎太郎にはキュンとされっぱなしです。
今回は、PowerShellでGet-Propertyを使います。

実験用ディレクトリとファイル構成はこのようになっています。

C:\Users\takk\tmp>powershell
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.

PS C:\Users\takk\tmp> gci -r -n
dir1
dir1\111
dir1\aaa
dir1\file.txt
dir1\111\222
dir1\111\file.txt
dir1\111\222\333
dir1\111\222\file.txt
dir1\111\222\333\444
dir1\111\222\333\file.txt
dir1\111\222\333\444\file.txt
dir1\aaa\bbb
dir1\aaa\file.txt
dir1\aaa\bbb\ccc
dir1\aaa\bbb\file.txt
dir1\aaa\bbb\ccc\ddd
dir1\aaa\bbb\ccc\file.txt
dir1\aaa\bbb\ccc\ddd\file.txt
PS C:\Users\takk\tmp>

gci -r -n (Get-ChildItem -Recurse -Name)で表示されるパスは、カレントフォルダからのパスとなってます。
Get-ItemPropertyのFullNameで絶対パスを取得できます。

PS C:\Users\takk\tmp> (get-itemproperty (gci -r -n)).fullname
C:\Users\takk\tmp\dir1
C:\Users\takk\tmp\dir1\111
C:\Users\takk\tmp\dir1\aaa
C:\Users\takk\tmp\dir1\file.txt
C:\Users\takk\tmp\dir1\111\222
C:\Users\takk\tmp\dir1\111\file.txt
C:\Users\takk\tmp\dir1\111\222\333
C:\Users\takk\tmp\dir1\111\222\file.txt
C:\Users\takk\tmp\dir1\111\222\333\444
C:\Users\takk\tmp\dir1\111\222\333\file.txt
C:\Users\takk\tmp\dir1\111\222\333\444\file.txt
C:\Users\takk\tmp\dir1\aaa\bbb
C:\Users\takk\tmp\dir1\aaa\file.txt
C:\Users\takk\tmp\dir1\aaa\bbb\ccc
C:\Users\takk\tmp\dir1\aaa\bbb\file.txt
C:\Users\takk\tmp\dir1\aaa\bbb\ccc\ddd
C:\Users\takk\tmp\dir1\aaa\bbb\ccc\file.txt
C:\Users\takk\tmp\dir1\aaa\bbb\ccc\ddd\file.txt
PS C:\Users\takk\tmp>

まあフルパスの一覧なら、dir/b/sの方が早いです。

更新日時を取得するには、LastWriteTimeを使います。

PS C:\Users\takk\tmp>gci -r -n -af | %{ Write-Host $_ (gp $_).LastWriteTime}
dir1\file.txt 2018/03/04 23:10:13
dir1\111\file.txt 2018/02/28 23:12:11
dir1\111\222\file.txt 2018/02/28 23:12:11
dir1\111\222\333\file.txt 2018/02/28 23:12:11
dir1\111\222\333\444\file.txt 2018/02/28 23:12:11
dir1\aaa\file.txt 2018/02/28 23:12:11
dir1\aaa\bbb\file.txt 2018/02/28 23:12:11
dir1\aaa\bbb\ccc\file.txt 2018/02/28 23:12:11
dir1\aaa\bbb\ccc\ddd\file.txt 2018/02/28 23:12:11
PS C:\Users\takk\tmp>

日付の一致判定は一旦文字列に変換してから文字列の比較で行います。

PS C:\Users\takk\tmp>gci -r -n -af | %{ Write-Host $_ ((gp $_).LastWriteTime.ToString('yyyyMMdd') -eq '20180304')}
dir1\file.txt True
dir1\111\file.txt False
dir1\111\222\file.txt False
dir1\111\222\333\file.txt False
dir1\111\222\333\444\file.txt False
dir1\aaa\file.txt False
dir1\aaa\bbb\file.txt False
dir1\aaa\bbb\ccc\file.txt False
dir1\aaa\bbb\ccc\ddd\file.txt False
PS C:\Users\takk\tmp>

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA