Jak umazávat staré soubory
Určitě jste již narazili na problém mazání starých souborů v adresáři. Ale ne všech, jen těch starších, které již jsou zpracované, archivované. Ano, vypadá to strašně jednoduše. Alespoň zadání: Smaž soubory, které byly vytvořeny před 30 dny a dříve. Novější ponech.
V Exploreru nebo jiném souborovém manageru je možné seřadit podle data, označit a "DEL". Ale já to nechci dělat ručně. Od toho máme počítače. (a kdo by na to každý měsíc myslel, že?)
Takže je nutné se na to podívat blíže a pokusit se vytvořit nějaký nástroj, který by to dělal automaticky a nejlépe aby uměl i nějaké parametry. Řešení máme několik
- Dávkový příkaz - ale fuj, kdo by se s tím matlal.
- Scriptování - třeba Visual Basic Script
- Scriptování - třeba PowerShell
Visual Basic Script
Potřebujeme vytvořit kód, který projde soubory v zadaném adresáři a vymaže jen ty, které spadají do patřičné podmínky. Na to je objekt Scripting.FileSystemObject. Jak by vypadal náš kód? Asi nějak takto:
For Each oFile in oFolder.Files
if oFile.DateCreated < RozhodneDatum then
DeleteFile oFile
end if
Next
Má to několik háčků, ale ty se dají snadno vyřešit. První háček je ten, že nelze mazato soubor v okamžiku, kdy procházím seznamem seouborů. takže si jej nejdříve musím zapamatovat a teprve potom mazat.
Úplný script je možné stáhnout ZDE.
PowerShell
S PowerShellem je to jednodušší, protože můžeme řetězit jednotlivé příkazy díky jejich striktně objektovému předávání výstupů. Vypadat by to mohlo například takto (zalomeno z důvodu čitelnosti)
get-childItem d:\logy -include *.zip | where {-not ($_.Attributes -like 'Directory') -and ($_.CreationDate -le ((get-date).Date).addDays(-90) } | Remove-Item
A samozřejmně je možné i zde pomocí parametrů si s tím trochu pohrát. Funkci pro PowerShell si můžete stáhnout zde.