2017-03-08 20 views
0

私はPowerShellを使い慣れていません。x日以上経過したすべてのファイルをPowershellで削除する場合

これに含まれるすべてのファイルがx日より古い場合、フォルダとすべてのサブフォルダを削除する方法を探しています。フォルダ内のすべてのファイルとすべてのサブフォルダを削除するコードがありますが、それを正しく変更する方法はわかりません。

$Now = Get-Date 

$Days = "30" 

$TargetFolder = "C:\temp" 
$Extension = "*.*" 
$LastWrite = $Now.AddDays(-$Days) 

$Files = Get-Childitem $TargetFolder -Include $Extension -Recurse | Where {($_.CreationTime -le "$LastWrite") -and ($_.LastWriteTime -le "$LastWrite")} 


foreach ($File in $Files) 
    { 
    if ($File -ne $NULL) 
     { 
     write-host "Deleting File $File" -ForegroundColor "Red" 
     Remove-Item $Location.FullName | out-Null 
     } 
    else 
     { 
     Write-Host "No more files to delete!" -foregroundcolor "Green" 
     } 
    } 
+0

は30日前に作成されましたか、変更されましたか? – 4c74356b41

+0

2015年にFileをダウンロードした場合、ModifieDateは2015で、2017/22/02に "C:\ temp"に移動したので、CreationDateはそれを削除する必要がないため、両方とも尊重する必要があります。 –

+0

ファイルをコピーしても、作成日時や筆記時間は変更されません。どのように達成したいかわからない – 4c74356b41

答えて

0

列挙すべてのフォルダとあなたが先頭にディレクトリの下を処理して、最初にそれらを最長パスを並べ替える:

Get-ChildItem $TargetFolder -Recurse -Directory | 
    Select-Object -Expand FullName | 
    Sort-Object Length -Desc 

をフィルター任意のファイルを持っているか、Xより新しいのフォルダないディレクトリのためのリストその中の日:

... | Where-Object { 
    -not $(Get-ChildItem $_ -Recurse | Where-Object { 
     $_.Creationtime -ge $LastWrite -or 
     $_.LastWriteTime -ge $LastWrite 
    }) 
} 

次いで、得られたフォルダーを削除します。

... | Remove-Item -Recurse -Force 
+0

Wow that greate thx :) –

関連する問題