Avatar billede keysersoze Guru
19. januar 2004 - 10:01 Der er 10 kommentarer og
3 løsninger

Giv mig et job

Jeg har behov for via en scheduled task at slette alle filer der er ældre end 15 mins i en bestemt mappe - hvordan fa** sætter jeg det op?
Avatar billede mufoxe Nybegynder
19. januar 2004 - 10:06 #1
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.
Avatar billede mufoxe Nybegynder
19. januar 2004 - 10:06 #2
"en tast" er så "en task" :)
Avatar billede keysersoze Guru
19. januar 2004 - 10:31 #3
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.
Avatar billede NanoQ Nybegynder
19. januar 2004 - 11:35 #4
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.
Avatar billede keysersoze Guru
19. januar 2004 - 12:04 #5
hmm - det skulle jo helst undgås :o/

Det er let nok at lave fx også en ASP-fil der vha FSO sletter filerne - og så bare kalde ASP-filen fra scheduled task...
Avatar billede bertelbrander Novice
19. januar 2004 - 18:32 #6
Du kan lave en bat fil som du sætter til at køre, denne skal:

1: Slette all filer i en list fil:
for /F %%I in (list.fil) do @del %%I
2: Liste alle filer i mappen til list.fil: dir /B * > file.lst

Og så schedulere denne til at køre hver 15 minutter.
Avatar billede keysersoze Guru
19. januar 2004 - 18:37 #7
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.
Avatar billede simonvalter Praktikant
19. januar 2004 - 19:15 #8
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

:argErr
echo Usage: %0 ^<filename^> ^<minutes^>
goto exit

:delErr
echo Error deleting %filename%
goto exit

:noFile
echo Invalid file name given

:exit
endlocal
Avatar billede simonvalter Praktikant
19. januar 2004 - 19:28 #9
der er også en der har lagt en løsning ind her, jeg kan godt nok ikke få den til at virke men måske kan du.
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20810699.html
Avatar billede bertelbrander Novice
19. januar 2004 - 23:22 #10
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
Avatar billede systemkonsulenten Nybegynder
28. marts 2004 - 18:49 #11
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.
Avatar billede keysersoze Guru
13. januar 2006 - 11:27 #12
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.
Avatar billede simonvalter Praktikant
13. januar 2006 - 12:53 #13
ok :-)
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