Avatar billede buch78 Novice
05. november 2003 - 18:21 Der 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
Avatar billede thesurfer Nybegynder
05. november 2003 - 18:26 #1
Skal kommandoen køres i DOS ved startup, eller må det gerne kunne køres gennem Windows?
Avatar billede thesurfer Nybegynder
05. november 2003 - 18:27 #2
..dvs, SKAL det være via batch, og ikke alm. program..?
Avatar billede buch78 Novice
05. november 2003 - 18:27 #3
jeg kunne godt tænkte mig at lave dem i en bat fil.. for så kan jeg lave et at job
Avatar billede thesurfer Nybegynder
05. november 2003 - 18:42 #4
jeg ved ikke lige om man kan lave det via batch.. men er sikker på at det kan laves med Delphi, Visual Basic, WScript..
Avatar billede nmh Nybegynder
05. november 2003 - 19:13 #5
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.
Avatar billede buch78 Novice
05. november 2003 - 19:27 #6
Hmm jeg skal bruge det til et projekt i forbindelse med en eksamen. så jeg skal helst kunne stå ind for hvad der sker i filen
Avatar billede nmh Nybegynder
05. november 2003 - 19:35 #7
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.
Avatar billede bertelbrander Novice
05. november 2003 - 20:00 #8
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
Avatar billede buch78 Novice
05. november 2003 - 20:03 #9
den udskriver filnavnet og så en værdi
Avatar billede bertelbrander Novice
05. november 2003 - 21:10 #10
Værdien skulle gerne være alderen på filen regnet i dage.
Avatar billede bertelbrander Novice
05. november 2003 - 21:19 #11
Hvis alderen passer kan du ændre linien:

echo %1 %Diff%

Til:

if %Diff% GTR 21 echo del %1

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.)
Avatar billede nmh Nybegynder
05. november 2003 - 21:20 #12
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
Avatar billede nmh Nybegynder
12. november 2003 - 20:05 #13
Hvordan går det med projektet?
Avatar billede nmh Nybegynder
17. november 2003 - 22:52 #14
Har du fået det til at virke?
Avatar billede buch78 Novice
18. november 2003 - 00:26 #15
Ja jeg langom længe fået det til at virke.. Tak for hjælpen
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester