Avatar billede Søren Bech Morsing Praktikant
27. december 2004 - 16:31 Der er 7 kommentarer og
1 løsning

slette filer via dos kommando - filer oprettet givent dato område

Jeg ønsker at lave en bat fil hvor med jeg kan slette nogle logfiler baseret på hvornår de er dannet (filens dato)

Er det muligt?

og lad venligst være at henvise til dos hjælpen - jeg er født efter dos blev "overtaget" af træk og slip ;)
Avatar billede arne_v Ekspert
27. december 2004 - 16:36 #1
Jeg tvivler meget på at det kan gøres i ren BAT fil.

Skriv et program i Java/C++/C#/Delphi/PHP/Perl/VBScript/whatever til at gøre det.
Avatar billede bertelbrander Novice
27. december 2004 - 19:45 #2
Hvis din bat-fil skal køre på Windows NT, 2000 eller XP kan man godt gøre det, men det er lidt besværligt.

Jeg lavede en gang en bat-fil der sletter filer ældre end X dage, var det noget du kunne bruge?
Avatar billede Søren Bech Morsing Praktikant
27. december 2004 - 19:51 #3
bertelbrander: det vil jeg meget gerne se.

arne_v: vil da overveje at læse min java bog så - gik på datamatiker studiet tilbage i 99 og lærte da en hel del - har bare ikke brugt det siden.
Fandt faktisk lige 2 bøger den anden dag - så måske det man lærte dengang kan give lidt gavn
Avatar billede bertelbrander Novice
27. december 2004 - 20:04 #4
Fandt denne:

@echo off
setlocal

for /F "tokens=1-4 delims=- " %%A in ('date /T') do call :CalcDays %%A %%B %%C %%D
set ToDay=%Days%
for /F %%I in ('dir /B /A-D *') do @call :ProcessFile %%I "%%~tI"
goto :EOF

:ProcessFile
for /F "tokens=1-3 Delims=-" %%I in (%2) do @call :CalcDays %%I %%J %%K
set /A Diff=%ToDay% - %Days%
if %Diff% GTR 30 echo del %1
goto :EOF

:CalcDays
set xxx=%1
if "%xxx:~0,1%" GTR "9" shift
set Day=%1
set Month=%2
set Year=%3
if %Year% LSS 1980 set /A Year+=1900
if %Year% LSS 1980 set /A Year+=100
if %Day:~0,1%==0 set Day=%Day:~1%
if %Month:~0,1%==0 set Month=%Month:~1%
set /A Year -= 1980
set /A LeapYears = (%Year% + 3) / 4
set /A Days=%Year%*365 + %LeapYears%
set /A LeapYear="%Year% %%4"
if LeapYear EQU 0 if %Month% GEQ 3 set /A Day+=1
set /A MonthDays=0
for /L %%I in (2,1,%Month%) do call :AddDays %%I
set /A Days += MonthDays
set /A Days += Day
goto :eof

:AddDays
for /F "tokens=%1" %%Z in ("0 31 28 31 30 31 30 31 31 30 31 30 31") do set /A MonthDays += %%Z

Den skal måske justeres lidt hvis du bruger 2000 eller NT.

Der er en linie hvor der står: if %Diff% GTR 30 echo del %1
Der checker den om filen er mere end 30 dage gammel, hvis den er det udskriver den "del filnavn", hvis du sletter ordet echo sletter den filen.
Avatar billede Søren Bech Morsing Praktikant
27. december 2004 - 20:08 #5
tak for det - ser indviklet ud - men jeg forsøger - går jeg galt i byen starter jeg på java.

læg svar!
Avatar billede bertelbrander Novice
27. december 2004 - 20:12 #6
Det er indviklet at lave den slags i bat-filer.
Husk at lave en backup inden du får slettet for meget.
Jeg samler ikke på point.
Har du overvejet python: http://www.python.org/ ?
Avatar billede Søren Bech Morsing Praktikant
27. december 2004 - 21:18 #7
kender jeg ikke - tager jeg lige med i sofaen og læser om

takker
Avatar billede bertelbrander Novice
28. december 2004 - 19:54 #8
I python kunne det se sådan ud:

import time
import os
from stat import *

now = time.time()
print 'Now: ', now

for f in os.listdir('D:/temp/cd') :
  pathname = os.path.join('D:/temp/cd', f)
  mode = os.stat(pathname)[ST_MODE]
  if not S_ISDIR(mode):
    age = now - os.stat(pathname)[ST_MTIME]
    age = age/(60*60*24)
    if age > 30 :
        print f, "is to old: ", age, "days"
        os.remove(pathname)
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
Kurser inden for grundlæggende programmering

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