Har fundet denne som gør det samme bare med 15 minutter i stedet for 30 dage, men da jeg ikke er særlig god til batch programmering er jeg ikke sikker på hvad det gør, samt hvodan man tilretter det....
xxcopy er måske bedre, men hvordan bruger man så det til at slette filer der er over 30 dage....
Jeg er nok lidt tungnem, men hvordan kører man scriptet ? Der er nogle input variable %1 %2 %3
Skal man dermed selv indskrive dag, måned og år ?
Så man kører den sådan her: filnavn.bat 28 10 2005
Når jeg kører den får jeg følgende fejl (jeg har navngivet filen sletfiler.bat): ----------------------------------------------------------------------- U:\test>sletfiler Manglende operator. 0 var ikke ventet på dette tidspunkt.
U:\test>sletfiler 28 10 2005 Manglende operator. 0 var ikke ventet på dette tidspunkt. ----------------------------------------------------
Det er winXP jeg tester på, men hvis det lykkes skal det ligge på en win2003 som scheduleret job.......ved ikke om der er forskel på de 2's kommando prompter
Dato formatet er lidt anderledes på XP, der er f.ex. ikke ugedag på %date% i XP Jeg har ændret scriptet så det kan køre på XP
I bunden står der "if %Diff% GTR 15 (" 15 er det antal minutter filerne skal være gamle inden de bliver slettet. Senere står der: echo del %1 Dette vil udskrive delete kommandoen, du fjerner echo når du er færdig med at teste.
@echo off setlocal for /F "tokens=1,2,3 delims=- " %%A in ("%date%") do @call :GetDays %%A %%B %%C for /F "tokens=1,2 delims=:" %%A in ("%time%") do call :GetMins %%A %%B set /A Now=%Mins% + %Days%*60*24
for /F "delims=;" %%A in ('dir /B *.txt') do call :Process "%%A" "%%~tA" 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 M=%2 - 1 for /L %%A in (1,1,%M%) do call :MonthDays %%A set /A Year-=2000 set /A Days+= "%Year%*365 + %Year% %%4"
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 set /A LeapYear="%Year% %%4" if %LeapYear% NEQ 0 goto :eof if %1==1 goto :eof set /A Days+=1
goto :eof :GetMins set Mins=%2 if %Mins:~0,1%==0 set Mins=%Mins:~1,2% set Hour=%1 if %Hour:~0,1%==0 set Hour=%Hour:~1,2% set /A Mins+=%Hour%*60 goto :eof
:Process set Mins=0 set Days=0 for /F "tokens=1,2,3 delims=- " %%A in (%2) do @call :GetDays %%A %%B %%C for /F "tokens=2,3 delims=: " %%A in (%2) do call :GetMins %%A %%B Set /A FileTime=%Mins% + %Days%*60*24 Set /A Diff=%NOW%-%FileTime%
if %Diff% GTR 15 ( echo %1 is to old: %Diff% echo del %1 )
Ja, det er ret besværligt at lave den slags i bat-filer, og det er ikke ret let at gennemskue hvordan det virker, jeg foretrækker normalt at gøre det med python.
Ja, Python er sikkert også enklere, det kender jeg bare heller ikke :-)
Skomager bliv ved din hest......eller noget i den stil. VBScriptet blev en del kortere end det ovenstående og det ville det sikkert også blive i Python.
Du skal i hvert fald have tak for hjælpen, selvom du ikke samler på points.
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ USAGE: delete_files [-h <arg>]|[-d <arg>] -h <int> : default 24. Angiver filens mindste alder i timer. -d <int> : default 0. Angiver filens mindste alder i dage. Filer i aktuelt bibliotek bliver slettet hvis de er ældre end angivet ved summen af argumenterne. Eks. delete_files # uden argumenter sletter alle filer over 24 timer delete_files -d 3 # sletter filer som er mere end 3 x 24 timer gamle delete_files -h 2 # sletter filer som er mere end 2 timer gamle """ import getopt, os, sys, datetime ############################## # Fetch and validate Options # ############################## try: Options = getopt.getopt(sys.argv[1:], 'h:d:') except: print __doc__ sys.exit()
# der der for mange Options if len (Options) > 1 : print __doc__, "To many options selected" sys.exit()
# set tiden som default 24 timer Tid = datetime.timedelta( hours=24 )
for Option, Argument in Options: try: # test if argument is int ? if Option == '-h': Tid = datetime.timedelta( hours=int( Argument ) ) elif Option == '-d': Tid = datetime.timedelta( days=int( Argument ) )
except: # Args was not int print __doc__, "args must bee int" sys.exit()
############################################# # gennemgå alle filerne i aktuelt bibliotek # #############################################
# Set grænsen for hvor gamle filerne må være Limit = datetime.datetime.now() - Tid
for FName in os.listdir("."): if os.path.isfile(FName) and not os.path.islink(FName): # kun filer chekkes if datetime.datetime.fromtimestamp( os.path.getmtime( FName ) ) < Limit: print "deleting " , FName # os.remove(FName)
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.