Kan du ikke bare schedulere en tast hver 16. min, som sletter alle filer i mappen? Hvis tasken sletter alle filer i mappen hvert 16. minut, må alle filer, som eksisterer i mappen når programmet kører, nødvendigvis være 15. gamle.
erhm - nej! Der kommer konstant filer til i mappen - et par stykker i minuttet - og da filerne i mappen kan blive brugt i op til 1 minut efter de er lagt i mappen kan jeg risikere at slette nogle filer der stadig er i brug hvis jeg gør det du siger.
Du kan ikke gøre det uden én eller anden form for 3. parts feature.
Jeg har med success brugt Wesco's AFDS (Automatic File Deletion System) til schedulerede oprydningsrutiner. Jeg vil umiddelbart tro den også kunne være interessant i dit tilfælde.
Jeg ved ikke hvordan jeg skal formulere det hvis det to gange har kunnet misforståes men;
- det er ligegyldigt hvor tit scriptet skal køre, men når det kører må det kun slette filer der har ligget i mappen i MIN. 15 minutter. Dvs oprettes der to filer - en kl. 17.00 og en kl 17.16, og jeg så kører mit job kl 17.30 må jobbet KUN slette filen fra kl. 17.00 da den anden fil kun er 14 minutter gammel.
måske kan du bruge dette. Det sletter en bestemt fil der er ældre end x min. hvis du kan batch kan du ændre det så det kan bruge wildcard. Desværre kan jeg ikke hjælpe dig med det ;(
@echo off setlocal
:chkarg if "%2"=="" goto argErr if "%1"=="" goto argErr
if not exist %1 goto noFile
:init
set fullname=%~f1 set filename=%~nx1 set /a minutes=%2 set /a offset = 0
:main for /f "tokens=1-3 delims=: " %%a in ( 'dir %fullname% ^|find "%filename%"' ) do set filetime=%%b%%c
:: filetime now looks like 0810p or 1215a so find out :: which, am or pm set am_pm=%filetime:~4,1%
:: if it's 'pm' then we will have to add 12 hours to :: to this time: if "%am_pm%"=="p" set /a offset = 12
:: now drop the trailing 'a' or 'p': set filetime=%filetime:~0,4%
set filehh=%filetime:~0,2% set filemm=%filetime:~2,2% if "%am_pm%"=="a" if "%filehh%"=="12" set filehh=00
:: drop any leading zeros from the hours or minutes :: values because we cannot add numbers with leading :: zeros ... if "%filehh:~0,1%"=="0" set filehh=%filehh:~1% if "%filemm:~0,1%"=="0" set filemm=%filemm:~1%
:: now convert the file time to minutes set /a filehh = filehh + offset set /a total_minutes = filehh * 60 set /a file_age = total_minutes + filemm
set /a expire_time = file_age + minutes
:: OK, now do the same thing for the current time, :: but note that the current time is in a different :: format (24-hour time) than the file time (12-hour :: time) ... for /f "tokens=1-6 delims=: " %%a in ( 'echo.^|time ^|findstr "current"' ) do set nowtime=%%e%%f
:: add a leading zero if it's less than 10 a.m. set tnowtime=%nowtime%X if "%tnowtime:~3,1%"=="X" set nowtime=0%nowtime%
set nowhh=%nowtime:~0,2% set nowmm=%nowtime:~2,2%
:: drop any leading zeros from the hours or minutes :: values because we cannot add numbers with leading :: zeros ... if "%nowhh:~0,1%"=="0" set nowhh=%nowhh:~1% if "%nowmm:~0,1%"=="0" set nowmm=%nowmm:~1%
:: now convert the current time to minutes: set /a now_minutes = nowhh * 60 set /a curr_time_in_minutes = now_minutes + nowmm
:: cross the midnight boundary: if %filehh% GTR %nowhh% ( set /a curr_time_in_minutes += 1440 ) if %curr_time_in_minutes% GEQ %expire_time% ( echo File %fullname% has expired. REM Uncomment these two lines to actually perform deletion del "%fullname%" 2> nul 1> nul if exist "%fullname%" goto delErr ) else ( echo %filename% is not yet over %minutes% minutes old ) goto exit
Jeg har strikket et script sammen, der sletter alle .txt filer i mappen der er mere end 15 minutter gamle:
Bemærk at scriptet går ud fra at: - formatet for date er "ma 19-01-2004" uden "", check det ved at skrive "echo %date% i en dos - prompt. - formatet af tid er "23:18:56,39", check det ved at skrve "echo %time" i dos-prompten. - formatet for fil-tid er "23-01-2003 11:38", check det ved at lave en dir i en kommando prompt.
Scriptet sletter IKKE filen som det er nu, du skal rette sidste linie til f.ex. "if %Diff% GTR 15 del %1" hvis/når du føler dig sikker på at scriptet gør det det skal, og intet andet. Diff er forskellen på tiden nu og tiden på filen, i minutter.
Du kan rette hvile filer i hvilken mappe der skal slettes ved at rette dir-kommandoen.
@echo off setlocal for /F "tokens=2,3,4 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-=1980 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 20%%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% del %1
Lad mig her slå et slag for XXCOPY!!! Den letteste måde at slette filer der f.eks. er mere end 15 minutter gamle, er med xxcopy. find det her: http://www.xxcopy.com/#download. OBS! du behøver kun xxcopy.exe. læg den ind i %systemroot%\system32 folderen. Herefter kan du kalde xxcopy fra en scheduled task eller command prompt med syntaksen "xxcopy /YY/DB#15M/RS det_som_skal_slettes". Det er verdens bedste program til fil håndtering, backup etc.
Hej alle - først og fremmest undskyld den lange svartid men jeg havde helt glemt dette (selvom jeg besøger eksperten stort set hver dag)... Vi er helt ud over problemet nu men jeg vil gerne have alle der har bidraget her til at give et svar hvis ikke i allerede har så jeg kan få lukket spm.
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.