Avatar billede dkkarpen Nybegynder
28. marts 2004 - 23:26 Der er 11 kommentarer

Slet mapper der er 7 dage gamle

Hej

Jeg laver backup med følgende bat fil.

mkdir "D:\backup\web\%date%"
xcopy /s "D:\webs\*" "D:\backup\web\%date%\"

Jeg kunne imidlertid godt tænke mig  at udvide bat filen så den også sletter mapper der er mere end 7 dage gamle. Hvordan gør jeg det?
Avatar billede bertelbrander Novice
28. marts 2004 - 23:30 #1
Det letteste ville være at gemme i 7 mapper, en for hver ugedag.
Hvilken Windows?
Avatar billede bertelbrander Novice
28. marts 2004 - 23:44 #2
I Win2000 kunne du lave følgende linie i din .bat-fil:

for /F %%I in ("%date") do set Ugedag=%%I

Og så bruge %Ugedag% i stedet for %date% i mkdir & xcopy kommandoerne (og evt starte med at slette det der ligger i mappen).
Avatar billede dkkarpen Nybegynder
29. marts 2004 - 08:58 #3
Tja - men er ikke det jeg ønsker. Jeg ønsker en løkke der kan slette mapper med navne "ældre" end 7 dage.
Avatar billede bertelbrander Novice
29. marts 2004 - 19:44 #4
Hvilke Windows versioner skal det kunne køre på?

Jeg har før lavet noget tilsvarende som lige skal tilpasses, men formatet for dato er ikke det samme på Win2000 og XP. Jeg vil gerne vide hvordan %date% ser ud på dit system, er der ugedag i %dato%?

Jeg går ud fra at den dato der skal bruges til at finde ud af om mappen er mere end 7 date gammel skal tages fra navnet, og ikke tidspunkt for oprettelse af mappen.
Avatar billede dkkarpen Nybegynder
29. marts 2004 - 20:35 #5
Windows 2003. Formatet er dd-mm-åååå. Og ja den dato der skal bruges til at finde ud af om mappen er mere end 7 date gammel skal tages fra navnet, og ikke tidspunkt for oprettelse af mappen.
Avatar billede bertelbrander Novice
29. marts 2004 - 20:51 #6
Jeg laver en løsning senere på aftenen.
Avatar billede dkkarpen Nybegynder
29. marts 2004 - 20:53 #7
Kanon
Avatar billede bertelbrander Novice
30. marts 2004 - 00:29 #8
Jeg fik strikket noget sammen der ser ud til at virke, men du bør nok lige teste det en extra gang inden du sætter det til at slette flere års arbejde.

Bemærk:
1: Du kan angive en sti til den mappe hvori dato-mapperne ligger som parameter til scriptet, f.ex: "C:\whatever folder\something\", bemærk at der er "" omkring og det afslutter med en \

2: Jeg har testet det på Win2000, der bruger et lidt anderledes dato-format. Jeg har forsøgt at tage højde for Win2003 og XP, den skulle gerne udføre if delen af "if errorlevel 1 () else ()" på Win2003 og XP.

3: Scriptet udskriver noget i stil med ""d:\Program\a - a\27-12-2003" is to old: 93" for mapper der er mere end 7 dage gamle. Den første del er mappenavn, det sidste tal er antal dage. Dette sker i næst sidste linie, dette skal rettes til de ønskede f.ex. rd /S "%FilePath:"=%%~1"

4: Der regnes ikke i timer og minutter, kun hele dage.

5: Der tages ikke højde for skudår.

@echo off
setlocal
set FilePath=
if not [%1]==[] (
  set FilePath="%~dp1"
) else (
  set FilePath=".\"
)

ver |find "Windows 2000" >nul
if errorlevel 1 (
  rem Not Win2000, %date% is "dd-mm-yyyy"
  for /F  "tokens=1,2,3 delims=- " %%I in ('date /T') do call :GetDays %%I %%J %%K
) else  (
  rem Win2000, %date% is "wd dd-mm-yyyy"
  for /F  "tokens=2,3,4 delims=- " %%I in ('date /T') do call :GetDays %%I %%J %%K
)

set /A Now=%Days%

for /F "delims=;" %%A in ('dir /B /AD "%FilePath:"=%??-??-????"') do call :Process "%%A"
goto :eof


:GetDays
set Month=%2
if %Month:~0,1%==0 set Month=%Month:~1,2%
set Days=%1
if %Days:~0,1%==0 set Days=%Days:~1,2%
set /A Days-=1
set Year=%3
set /A Month-=1
for /L %%A in (1,1,%Month%) do call :MonthDays %%A
set /A Year-=1980
set /A Days+="%Year%*365"

goto :eof

:MonthDays
for /F "tokens=%1" %%A in ("31 28 31 30 31 30 31 31 30 31 30 31") do set /A Days+=%%A
goto :eof

:Process
set Days=0
for /F "tokens=1,2,3 delims=-" %%A in (%1) do @call :GetDays %%A %%B %%C
Set /A Diff=%NOW%-%Days%
if %Diff% GTR 7 (
  echo "%FilePath:"=%%~1" is to old: %Diff%
)
Avatar billede dkkarpen Nybegynder
30. marts 2004 - 11:37 #9
Ser rigtig godt ud. Når jeg vil slette mapperne tilføjer jeg linien:

del "%FilePath:"=%%~1" /Q

Men den sletter kun filerne i mapperne ikke mapperne selv. Hvordan klares det?
Avatar billede dkkarpen Nybegynder
30. marts 2004 - 19:25 #10
Ahh - rmdir ;-) Laver du et svar?
Avatar billede bertelbrander Novice
30. marts 2004 - 20:19 #11
Jeg forsøger at undgå point.
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