Kezdőoldal > General > Delete folders older than…

Delete folders older than…


Egyik helyen szukseg volt arra, hogy bizonyos napnal regebbi mappak torlesre keruljenek. Nagy dolog – mondhatnank. Igen am, de parancs-sorbol, utemezve van erre szukseg. S erre nincs semmilyen parametere a "normal" torlo parancsoknak.
 
A neten keresgelve tobb helyen is felmerul ez a kerdes, kulonbozo megoldasokkal. Nos, nem akartam fizetos programot, raadasul W2k-rol volt szo, ami meg jobban szukiti a lehetseges opciokat.
 
Vegul talaltam egy remek parancs-allomanyt, amit leteszteltem, s kiderult, hogy tokeletesen azt tudja, amire szukseg van. Amikor viszont elesben bevetettem, kiderult, hogy a benne hasznalt ForFiles.exe nem tudja kezelni a "."-ot tartalmazo konyvtarneveket – ebben az esetben nem konyvtarkent listazza ki. Probaltam mindenfele trukkel kikerulni, viszont amikor sikerult kilistaznom, akkor azert tudta, mert benne volt (tehat a konyvtarban levo allomanyt talalta meg), igy ertelemszeruen az RD nem tudta torolni.
 
Mivel viszont csak ilyen konyvtarakrol van szo, nem johetett szoba az atnevezes sem.
 
Alternativ megoldaskent a Robocopy segitseget akartam igenybe venni, hiszen az is tud idore szurni. Mar azt hittem, hogy megvagyok – amikor kiderult, hogy csak az allomanyok idejet veszi figyelembe, nem az alkonyvtaraket. Ez nem megfelelo, hiszen az alkonyvtarban lehet regebbi allomany, mint maga a konyvtar – s azt nem kellene torolni, hiszen a teljes tartalomra szukseg van, amig a konyvtar aktiv (azaz nem eri el x napos allapotat). – Zarojelben megjegyzem, hogy a Forfiles eseten sem valt volna be igy a modszer, mert ott is ugye csak allomanyokra tudtam volna keresni (a mar ismertetett hiba miatt).
 
(Nehany erdekes dolog azert kiderult a Robocopy-rol: mozgatasnal – s persze masolasnal is – azonos allomanyokat felulir, de ha marad valami a konyvtarban, megmarad a struktura. Az E kapcsoloval akkor is letrehozza a strukturat, ha nincs is mit masolni – tehat nem esik semmi bele a szuresbe.)
 
Eleinte arra gondoltam, hogy elmasolom onnan, majd a celhelyet torlom – de eszembe jutott, hogy probaljam meg azt, hogy a segitsegevel letrehozok egy masik batch-allomanyt, amit a legvegen lefuttatok – ez abbol a szempontbol optimalisabb, hogy nem masolunk feleslegesen (nem terheljuk a gepet), hanem kozvetlenul a forrasnal toroljuk. Itt viszont az jott elo, hogy minden konyvtarat kilistaz, amit megvizsgal – igy az aktivakat is.

 

Nagyon kellett vigyazzak az idezojelekkel, mert egyreszt a szokozt tartalmazo konyvtarnevek miatt szuksegesek, viszont nem minden esetben tudja feldolgozni oket. Sot, helyenkent szukseges volt a " trukkot is bevetni (hogy a keletkezett allomanyban idezojelek koze keruljon az utvonal – tehat a parancs-sor ne dolgozza fel az idezojelet, hanem irja ki).
 
Tovabb agyaltam. Arra gondoltam, hogy mi lenne, ha en hasonlitanam ossze a datumokat, s en dontenem el, hogy ki megy s ki marad. Igen am, de ehhez valahogyan ki kellett szamoljam az x nappal regebbi datumot. Itt jott be a kepbe az elozo cikkem (itt a script az OlderThan nevet kapta).
 
Megvolt a datum, most mar csak az hianyzott, hogy a regi barat, a jo oreg DIR parancs segitsegevel kilistazzam a konyvtarakat. A tovabbiak soran bele kellett melyedjek a file-strukturaban talalhato datum-bejegyzesekhez. Gyakorlatilag a letrehozas, modositas, ill. hozzaferes datumai kozul kellett eldontsem, hogy melyikre is van szuksegem. Alkonyvtar letrehozasakor a benne talalhato allomanyok lehetnek regebbiek, mint a letrehozas datuma. Modositas az, amikor utoljara a "lista" tartalma modosult (uj, torolt, atnevezett allomany) – de ha "csak" az allomany tartalma valtozott, akkor nem valtozik a szulo konyvtar modositasi datuma. Igy a modositasi datum lehet regebbi, mint a benne talalhato allomanyokke. Hozzaferes egyertelmu, mar a konyvtar tartalmanak listazasakor ez tortenik, tehat az szinte mindig aktualis datumot jelent.
 
Igy szuletett meg az alabbi script. Ez csak kilistazza a vegeredmenyt, az Echo-k eltavolitasaval a megfelelo helyrol elesitjuk is a torlest.
 
Ja, s fontos megemliteni a kulonbseget a "Goto Eof" es "Goto :Eof" kozott. Elobbi a cimkehez ugrik, mig a masodik kilep a ciklusbol, illetve masodszori alkalmazas eseten a parancs-fajlbol is…
 
@Echo off
 
:: Calculate date older than "parameter" day
@Call "OlderThan.bat" 10
:: From where are we deleting
Setlocal
set From="Source directory"
 
:: We are working on this set: (TC=Creation, TA=Last access, TW=Last written)
:: Dir %From% /AD /TC /OD
:: We are processing the result of formatted DIR
:: Skipping the first 7 rows, because of header and the . and .. directories
For /F "skip=7 tokens=1,3,4 delims=><, " %%i in (‘Dir %From% /AD /TC /OD’) do call :Compare %%i,%%j,%%k
 
GOTO EOF
 
:Compare
:: If we are at the end of listing, there are some rows we must not process
if NOT "%~2"=="DIR" goto :EOF
if "%~1" LSS "%yyyy%.%mm%.%dd%" (Echo RD /S /Q %From%%~3) Else (Echo REM RD /S /Q %~3)
goto :EOF
 
:eof
 
 
 
 
Advertisements
Kategóriák:General
  1. Tako
    március 7, 2009 - 3:31 du.

    ügyes! de remegne a gyomrom egy ilyen autómata törléstől…

  2. Asterix
    március 9, 2009 - 7:31 de.

    Takoca, nyugi. Ha megfeleloen be van allitva az utvonal, akkor miert kellene felned? 🙂

  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: