4

最後のアクセス時間に基づいて、すべてのファイルを(すべてのフォルダーとサブフォルダーで再帰的に)削除する必要があります。

私はこの答えを示唆するN日より古いファイルを削除するためにスタックオーバーフローポストバッチファイルを見ていました:

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"

ただし、これにより、最終アクセス時刻ではなく、最終変更時刻に基づいてファイルが削除されます。

また、コマンドをスクリプトファイルに保存して、ダブルクリックするだけで実行できるようにする方法はありますか?

4

2 に答える 2

7

を使用Get-ChildItem -recurseしてすべてのファイルを取得し、それらをwhere-objectコマンドレットにパイプしてディレクトリを除外し、LastAccessTimeプロパティを使用してその属性に基づいてフィルタリングできます。次に、削除コマンドを実行するforeach-objectに結果をパイプします。

こんな感じになってしまいます。Get-Dateの使用に注意してください。年の初め以降にすべてのファイルを更新するには、独自の日付に置き換えてください。

get-childitem C:\what\ever -recurse | where-object {-not $_.PSIsContainer -and ($_.LastAccessTime -gt (get-date "1/1/2012"))} | foreach-object { del $_ }

または、いくつかの一般的なエイリアスを使用してすべてを短縮するには:

dir C:\what\ever -recurse | ? {-not $_.PSIsContainer -and ($_.LastAccessTime -gt (get-date "1/1/2012"))} | % { del $_ }
于 2012-09-11T23:51:33.257 に答える
4

余談ですが、PowerShell 3.0で同じこと(ファイルのみを取得)を行う方法は次のとおりです。

$old = Get-Date "1/1/2012"

Get-ChildItem C:\what\ever -File -Recurse | 
Where-Object {$_.LastAccessTime -gt $old} | 
Remove-Item -Force
于 2012-09-12T06:53:59.707 に答える