Sto scrivendo un semplice script di backup .bat e, come parte di esso, voglio che il backup più vecchio (cartella) venga eliminato al raggiungimento di un limite massimo di backup.Batch Script per eliminare la cartella più vecchia in una data cartella
In questo momento ho questo:
%COUNTER%
si basa sul numero di cartelle di backup attualmente nella directory in cui sono memorizzati i backup, ed è calcolato in precedenza nello script.
%MAXBACKUPS%
è solo un numero specificato dall'utente come "10", per indicare che si desidera conservare solo fino a 10 versioni dei backup.
:: Delete the oldest backup, but only if we've exceeded the desired number of backups.
IF %COUNTER% gtr %MAXBACKUPS% (
ECHO More than %MAXBACKUPS% backups exist. Deleting oldest...
FOR /f "delims=" %%a in ('dir "..\Backup\*" /t:c /a:d /o:-d /b') do rd /s /q "..\Backup\%%a"
::Increment the counter down since we've just removed a backup folder.
SET /a COUNTER=%COUNTER%-1
)
Vorrei che questo script per solo eliminare l'una cartella più antica nella cartella ..\Backup
, ma così com'è sembra cancellare ogni singola cartella che trova una volta che raggiunge il limite di backup, che non è ovviamente il desiderato comportamento.
bene, lo script elimina ogni singola cartella perché si ha un ciclo in là che richiede 'rd' per ogni cartella. Questo è ciò che fa il comando 'for'. Perché l'hai scritto in quel modo? – HugoRune
Pensavo di aver bisogno di ordinare correttamente tutte le cartelle per data, ma ora che ci penso, probabilmente non è così. – Ectropy
A quanto pare, è il caso, ma il modo in cui l'ho fatto in origine era un po 'spento. – Ectropy