管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

最終更新日がN日前のファイルを列挙する(PowerShell)

最終更新日がN日前(7日前、3日前など)のファイルを列挙したかったのでPowerShellで書きました。

検証環境

PS C:\Users\hoge\> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  1023

ソース

検索結果についてはOut-GridView(表形式のダイアログ)で表示します。

param(
    [string]$targetPath    # 検索対象パス
   ,[int]$expiredDays=7    # 経過日数(デフォルト7日)
)

# エラーがあった時点で処理終了
$ErrorActionPreference = "stop"

function script:main($targetPath) {
    # 引数チェック
    if ($targetPath -eq "") {
        Write-Host "検索対象のパスを入力してください"
        exit 1
    }
    
    $results = (Get-ChildItem -Recurse $targetPath |`
    Where-Object{$_.Attributes -ne "Directory" -and ($_.LastWriteTime -lt (Get-Date).AddDays(-$expiredDays))}) # ディレクトリは探索対象外、最終更新日が$expiredDaysより前のもののみ対象
    
    if($results.Length -eq 0){
        Write-Host "結果がありません"
        exit 1
    }
    
    $results | Select-Object FullName, @{label="SIZE(MB)"; expression={"{0:#,0.00}MB" -f ($_.Length / 1MB)}}, LastWriteTime |` # 日時は最終更新日
    Sort-Object LastWriteTime |` # 最終更新日の昇順でソート
    Out-GridView
    
}

main $targetPath

参考にしました

pig-log.com
www.haruru29.net