05. november 2003 - 18:21Der er
14 kommentarer og 1 løsning
Slette filer der er ældre end 3 uger fra en bat fil
Hejsa,, jeg har et backup system som skriver filer ned på en anden disk hver nat.. problemet er bare at der ligger så mange nu.. det jeg mangler er en dos kommando til at slette dem der er ældre end 3 uger.. mine filer bliver gemt sådan..
> D:\autobackup\mysql\"opsamling_%DATE%.sql"
en fil kommer fx til at hedde opsamling_03-11-2003
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Du vil kunne bruge scriptet, som du kan finde her: http://www.eksperten.dk/spm/412969 Det er godt nok ikke en bat-fil, men vil kunne klare det du ønsker.
Ja, det er godt nok et ret stort script, men det kan jo også gøre en del. Det kan laves meget kortere, hvis man vil begrænse funktionaliteten. Hvis jeg får tid, vil jeg se på det torsdag eller fredag.
Jeg lavede en gang et lille bat-script der udskriver hvor mange dage hver fil i en mappe er. Prøv at gemme det i en .bat-fil i mappen med de filer der skal slettes og se om det gør som du forventer. Det skulle gerne skrive noget i retning af:
tochar.cpp 11 tochar.obj 11 tochar.tds 11
Hvis det virker kan det let laves om så det sletter filer ældre end et antal dage.
@echo off setlocal
for /F "tokens=1-4 delims=- " %%A in ('date /T') do call :CalcDays %%A %%B %%C %%D echo -- %Days% -- set ToDay=%Days% for /F %%I in ('dir /B /A-D *') do @call :ProcessFile %%I "%%~tI" goto :EOF
:ProcessFile for /F "tokens=1-3 Delims=-" %%I in (%2) do @call :CalcDays %%I %%J %%K set /A Diff=%ToDay% - %Days% echo %1 %Diff% goto :EOF
:CalcDays set xxx=%1 if "%xxx:~0,1%" GTR "9" shift set Day=%1 set Month=%2 set Year=%3 if %Year% LSS 1980 set /A Year+=1900 if %Year% LSS 1980 set /A Year+=100 if %Day:~0,1%==0 set Day=%Day:~1% if %Month:~0,1%==0 set Month=%Month:~1% set /A Year -= 1980 set /A LeapYears = (%Year% + 3) / 4 set /A Days=%Year%*365 + %LeapYears% set /A LeapYear="%Year% %%4" if LeapYear EQU 0 if %Month% GEQ 3 set /A Day+=1 set /A MonthDays=0 for /L %%I in (2,1,%Month%) do call :AddDays %%I set /A Days += MonthDays set /A Days += Day goto :eof
:AddDays for /F "tokens=%1" %%Z in ("0 31 28 31 30 31 30 31 31 30 31 30 31") do set /A MonthDays += %%Z
Hvorved den vil den udskrive kommandoen for at slette alle filer ældre end 21 dage. Hvis det ser rigtigt ud sletter du ordet echo i ovenstående for at få den til at slette filerne. (Det er måske en god ide at lave backup først.)
Jeg lavede lig et simpelt script, der sletter alle filer i et kataloget d:\tst, hvis de er mere end 10 dage gamle.
Option Explicit dim oFS, oFiles, fil set oFS=Wscript.CreateObject("Scripting.FileSystemObject") set oFiles=oFS.Drives("D:").RootFolder.SubFolders("tst").Files for each fil in oFiles if Clng(fil.DateLastModified)+10 <= Clng(Now) then oFS.DeleteFile Fil end if next
Ja jeg langom længe fået det til at virke.. Tak for hjælpen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.