Jak vymazat v dávkovém souboru soubory starší než X dnů
Pokud potřebujete v dávkovém souboru smazat soubory, které jsou starší než stanovený počet dnů, je to možné udělat pomocí příkazu forfiles. Ten je součástí Windows Vista, Windows server 2003 a novějších (Windows 7 jej obsahuje. Windows XP x64 jej taky obsahuje.)
Pokud byste chtěli použít forfiles i ve Windows XPx86, museli byste si stáhnout soubor
mirror a umístit ho po rozzipování do adresáře system32 vaší instalace Windows (typicky c:\windows\system32\).
Zde je vzorový kód pro mazání souborů starších než týden z nějakého adresáře. příkaz chcp na začátku nastavuje codepage na 1250, aby fungovala čeština v názvech souborů:
Zde je vzorový kód pro mazání souborů starších než týden z nějakého adresáře a jeho podadresářů (podadresáře smazány nebudou):
TIP: pro odladění skriptu můžete použít následující skript, který jenom zobrazí, co by výše uvedené skripty smazaly:
EDIT 09/2012: Pokud se v názvu souborů vyskytují mezery, zkuste dát @path do uvozovek. (otestováno na W7x64)
Nápovědu k příkazu forfiles získáte zadáním forfiles /? v dosovském okně.
Pokud vám zbudou prázdné podadresáře a chcete se jich zbavit, zkuste spustit:
Dávka se pokusí smazat všechny adresáře, ale podaří se to jenom u prázdných.
Bohužel nemaže adresáře, jejichž jméno obsahuje diakritiku.Problém s mazáním adresářů s diakritikou odstraní nastavení codepage 1250.
Edit 20.3.2016: Pan Petr Filipi mne mailem upozornil na následující problém:
Příkazů Forfiles existuje asi mnoho typů podle typů operačních systémů a mně trvalo mnoho hodin než jsem přišel na to, že „@path“ není to samé jako „@PATH“, že přepínač „–m“ není to samé jako „-M“ nebo „/m“, že někdy se musí použít mezera mezi parametrem a někdy ne „-m*.*“ a „-m *.*“ apod.
Tedy v případě, že Vám něco nefunguje, zkontrolujte si syntaxi v nápovědě ke konkrétní verzi příkazu Forfiles ( forfiles /? )