Non conosco alcun componente aggiuntivo di Explorer, ma come la maggior parte delle cose in Windows, questo può essere fatto con PowerShell:
ForEach ($Drive in Get-PSDrive -PSProvider FileSystem) {
$Path = $Drive.Name + ':\$Recycle.Bin'
Get-ChildItem $Path -Force -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -Recurse
}
Salva questo script come file di testo con .ps1
estensione. È quindi possibile utilizzare l'Utilità di pianificazione per eseguirlo a intervalli regolari.
Innanzitutto, tuttavia, è necessario consentire l'esecuzione degli script di PowerShell, poiché per impostazione predefinita è possibile eseguire solo i comandi digitati direttamente nel prompt di PowerShell. Per fare ciò, aprire PowerShell e digitare il comando seguente:
Set-ExecutionPolicy RemoteSigned
Digitare "y" o "yes" quando richiesto. Vedi Get-Help Set-ExecutionPolicy
per maggiori informazioni.
Ora apri Utilità di pianificazione e crea una nuova attività con i seguenti parametri:
- Nella scheda "Generale", inserisci un nome e seleziona l'opzione "Esegui con i privilegi più alti"
- Nella scheda "Trigger", aggiungi un nuovo trigger e imposta l'attività per l'esecuzione giornaliera
- Nella scheda "Azioni", aggiungi una nuova azione:
- lasciare il tipo come "Avvia un programma"
- imposta il campo "Programma / script" su
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
- imposta il campo "Aggiungi argomenti" su
-NonInteractive -File "C:\path\to\script.ps1"
- Nella scheda "Condizioni", deseleziona "Avvia l'attività solo se il computer è alimentato a corrente alternata"
Spiegazione riga per riga dello script:
ForEach ($Drive in Get-PSDrive -PSProvider FileSystem) {
Viene visualizzato un elenco di tutte le unità del computer e le scorre una ad una. Il -PSProvider FileSystem
parametro è necessario per restituire solo le unità disco, poiché PowerShell ha anche pseudodrive per varie altre cose come l'hive del registro.
Per ulteriori informazioni, vedere Get-Help Get-PSDrive
e questa esercitazione sull'elaborazione in loop in PowerShell .
$Path = $Drive.Name + ':\$Recycle.Bin'
Questo costruisce il percorso della cartella Cestino sull'unità corrente. Nota l'uso di virgolette singole intorno alla seconda parte, per impedire a PowerShell di interpretare $Recycle
come variabile.
Get-ChildItem $Path -Force -Recurse -ErrorAction SilentlyContinue |
Ciò restituisce tutti i file e le sottocartelle nel percorso specificato (quello che abbiamo creato con il comando precedente). Il -Force
parametro è necessario per accedere alle cartelle nascoste e di sistema e -Recurse
rende il comando ricorsivo, ad es. scorrere anche tutte le sottodirectory. -ErrorAction
è un parametro standard per la maggior parte dei comandi di PowerShell e il valore SilentlyContinue
fa sì che il comando ignori gli errori. Lo scopo è prevenire errori per le unità che sono state configurate per eliminare immediatamente i file. Il |
simbolo alla fine riporta i risultati al comando successivo; L'ho diviso in più righe per una migliore leggibilità.
Per ulteriori informazioni, vedere Get-Help Get-ChildItem
.
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Questo semplicemente filtra i risultati dal comando precedente e restituisce solo quelli che sono più vecchi di 30 giorni. $_
si riferisce all'oggetto attualmente in fase di elaborazione e la LastWriteTime
proprietà in questo caso si riferisce alla data e all'ora in cui il file è stato eliminato. Get-Date
restituisce la data corrente.
Per ulteriori informazioni, vedere Get-Help Where-Object
e Get-Help Get-Date
.
Remove-Item -Recurse
Questo elimina semplicemente gli elementi passati ad esso dal comando precedente. Il -Recurse
parametro cancella automaticamente il contenuto delle sottocartelle non vuote; senza di essa, ti verranno richieste tali cartelle.
Per ulteriori informazioni, vedere Get-Help Remove-Item
.