Toon posts:

[CMD] oude files deleten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste Tweakers,

Sorry als dit topic verkeerd staat, ik wist niet zeker waar ik het onder moest plaatsen!!

Op dit moment heb ik een backup-script draaien, die elke dag een backup maakt van een aantal folders. Hij kopieert ze via xcopy naar een Lacie diskstation. Een onderdeel van het script is, dat ik backups na 30 dagen wil weggooien. Hiervoor gebruik ik op dit moment de volgende regel:

C:\WINDOWS\system32\robocopy B:\ B:\Old\ *.* /e /move /create /minage:30 /xd Old /log:"B:\Log Files\DelOld.log"


Vervolgens verwijder ik de map B:\Old.

Dit heeft echter als tot gevolg dat ook files uit de backup van (bijvoorbeeld) vandaag worden verwijderd, omdat robocopy naar de "Date modified" kijkt. Bij het uitvoeren van xcopy wordt die datum niet aangepast.

Alle files worden opgeslagen in een map, met de datum als naam (formaat YYYYMMDD). Is het niet mogelijk om aan de hand van de naam van een map deze te verwijderen, in plaats van met robocopy?

Op google kan ik hier weinig over vinden... Heb wel gevonden hoe het linux moet, maar niet hoe het vanuit een batch file kan.

Alvast bedankt voor jullie reacties!!

  • Ferruginous Hwk
  • Registratie: September 2003
  • Niet online
Waarom kies je voor een Robocopy Backup?
Het lijkt me dat Windows Backup dit toch ook zou moeten kunnen ?

Het opschonen kan vervolgens gebeuren door dit te scripten (cmd, oid)

Everything should be made as simple as possible, but not simpler. (A. Einstein)


Verwijderd

Topicstarter
ReVolpe schreef op woensdag 16 juni 2010 @ 21:52:
Waarom kies je voor een Robocopy Backup?
Zoals ik al schreef gebruik ik xcopy voor het backuppen en robocoppy voor het verwijderen van oude files!

Verwijderd

Topicstarter
Eigenlijk zoek ik gewoon een manier om naar de naam van de map te kijken, deze is in YYYYMMDD formaat en aan de hand daarvan te bepalen welke ik ga verwijderen.

  • Krypt
  • Registratie: April 2000
  • Laatst online: 02:19
Had even zin om wat te pielen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@Echo off
CLS

REM Clearing used variables

Set Month=
Set Day=
Set Year=
Set MinDate=

REM Read current date in variable
for /f "tokens=2,3,4 delims=- " %%a in ("%Date%") do (
  Set Year=%%c
  Set Month=%%b
  Set Day=%%a
)

REM Remove the '0' prefix if present. Fix to ensure decimal is used by 'SET' instead of Octal 
If %Month:~0,1%==0 Set Month=%Month:~1,1%
If %Day:~0,1%==0 Set Day=%Day:~1,1%

REM Reduce date by one month
Set /A Month=%Month%-1

REM Fix for yearshift
If "%Month%"=="0" (
  Set Month=12
  Set /A Year=%Year%-1
)

REM Add additional '0' prefix if needed
If %Month% LSS 10 Set Month=0%Month%
If %Day% LSS 10 Set Day=0%Day%

REM Construct minimal date
Set MinDate=%Year%%Month%%Day%

REM Index all folders.
For /d %%a in (*.*) do (

  REM If foldername is older than one month, delete it.
  IF %%a LSS %MinDate% (
    Echo %%a should be deleted.
    REM RD /S /Q "%%a"
  )
)

REM Clearing used variables

Set Month=
Set Day=
Set Year=
Set MinDate=


Behold... the power of BATCH!! :P

Korte uitleg; Hij pakt de huidige datum en trekt daar 1 maand vanaf.
Dit match't ie met de foldernamen. Als het "getal" (opgebouwd uit Jaar+maand+dag) lager is dan huidige datum-1maand, dan kan ie de folder verwijderen.

Disclaimer: Wel goed testen; en als er iets fout gaat dan is het niet mijn schuld :P

PS. Ook even kijken of het datumformaat klopt; script gaat nu uit dat %DATE% de ouput als "do 17-06-2010" uitspuugd

[ Voor 18% gewijzigd door Krypt op 17-06-2010 11:15 ]

Pvouput live


  • ThomVis
  • Registratie: April 2004
  • Laatst online: 28-01 21:48

ThomVis

Detected rambling:

Of je gebruikt de standaardisatie in de foldernaam en bewaart daar maar 30 van:
code:
1
2
3
4
5
6
7
8
9
@echo off
set Count=30
for /f "tokens=*" %%a in ('dir /ad /b /o-n 20??????') do set "DirName=%%a" & call:sub1
goto:eof

:sub1
if %Count% EQU 0 rd /q /s %DirName% & goto:eof
set /a Count-=1
goto:eof

You don't have to know how the computer works, just how to work the computer.

Pagina: 1