Gå til innhold

Sletting av filer som er X dager gamle, via BAT


Anbefalte innlegg

Hei.

 

Jeg er på jakt etter et script som kan slette filer fra en mappe (gjerne innholdet i undermapper også) som er eldre enn f.eks 14 dager.

 

Har et script, men er usikker på hva det egentlig gjør. Har testet det, men det skjer ingen ting, eneste jeg har fått til er å slette alt innhold i mappa jeg tester mot.

 

Ta en titt på scriptet under, hva må jeg kjøre i cmd for å få slettet filer som er over 14 dager gamle?

 

Er det noen som har peil på scripts, som kan hjelpe meg litt på vei.

Kjører windows 2000 plattform.

 

::::::::::::::::::::::::::::::::SCRIPTET:::::::::::::::::::::::::::::::::::::::::

 

@echo off

SET OLDERTHAN=%1

IF NOT DEFINED OLDERTHAN GOTO SYNTAX

set FileDir=%~2

 

if "%FileDir%"=="" set FileDir=.

 

for /f "tokens=2" %%i in ('date /t') do set thedate=%%i

 

set mm=%thedate:~0,2%

set dd=%thedate:~3,2%

set yyyy=%thedate:~6,4%

 

set /A dd=%dd% - %OLDERTHAN%

set /A mm=%mm% + 0

 

:LOOPDATE

 

if /I %dd% GTR 0 goto DONE

set /A mm=%mm% - 1

if /I %mm% GTR 0 goto ADJUSTDAY

set /A mm=12

set /A yyyy=%yyyy% - 1

 

:ADJUSTDAY

if %mm%==1 goto SET31

if %mm%==2 goto LEAPCHK

if %mm%==3 goto SET31

if %mm%==4 goto SET30

if %mm%==5 goto SET31

if %mm%==6 goto SET30

if %mm%==7 goto SET31

if %mm%==8 goto SET31

if %mm%==9 goto SET30

if %mm%==10 goto SET31

if %mm%==11 goto SET30

if %mm%==12 goto SET31

 

:SET31

set /A dd=31 + %dd%

goto LOOPDATE

 

:SET30

set /A dd=30 + %dd%

goto LOOPDATE

 

:LEAPCHK

set /A tt=%yyyy% %% 4

if not %tt%==0 goto SET28

set /A tt=%yyyy% %% 100

if not %tt%==0 goto SET29

set /A tt=%yyyy% %% 400

if %tt%==0 goto SET29

 

:SET28

set /A dd=28 + %dd%

goto LOOPDATE

 

:SET29

set /A dd=29 + %dd%

 

:DONE

if /i %dd% LSS 10 set dd=0%dd%

if /I %mm% LSS 10 set mm=0%mm%

for %%i in (%FileDir%\*.*) do (set FileName=%%i call :PROCESSFILE %%~ti)

 

set mm=

set yyyy=

set dd=

set thedate=

goto EXIT

 

:SYNTAX

ECHO.

ECHO USAGE:

ECHO DELOLD X [Dir]

ECHO Where:

echo X is the number of days previous to Today.

echo Dir is the optional directory where files exist. Defaults to current directory.

ECHO.

ECHO EX: "DELOLD 5" Deletes files older than 5 days.

echo "DELOLD 120 c:\temp Deletes files from the c:\temp directory that are older

echo than 120 days.

GOTO EXIT

 

:PROCESSFILE

set temp=%1

 

set fyyyy=%temp:~6%

 

if /I %fyyyy% LSS 100 set fyyyy=20%fyyyy%

if /I %fyyyy% GTR 2069 set fyyyy=19%temp:~6%

 

set fmm=%temp:~0,2%

set fdd=%temp:~3,2%

 

:: +*************************************+

:: | This is where the files are deleted |

:: | Change the ECHO command to DEL to |

:: | delete. ECHO is used for test. |

:: +*************************************+

 

if /I %yyyy%/%mm%/%dd% GEQ %fyyyy%/%fmm%/%fdd% (echo %FileName%)

 

set temp=

set fyyyy=

set fmm=

set fdd=

 

:EXIT

 

:::::::::::::::::::::: END SCRIPT ::::::::::::::::::::::::::::::::::::::::::::::::

Videoannonse
Annonse

Tviler på at det er gjennomførbart med BAT med mindre du har ei exe-fil du kan kale opp og som kan gjøre jobben med hver enkel fil.

 

Anbefaler deg heller å lære å lage en VBS-fil. Det er et scriptspråk som jeg bruker å si svever et sted midt imellom BAT og et programmeringsspråk som f.ex C eller Java.

Du kan ikke lage fullverdige program i VBS pga. det mangler GUI og er liksom ikke ordentlig objekt-orientert, men til ditt formål er det perfekt.

Endret av geir__hk

Har laget et vbs-script som gjør jobben i en mappe du velger:

 

Set oShell = CreateObject("Shell.Application")

On Error Resume Next

d = InputBox("Tast inn antall dager" & vbcrlf _

& "(slette filer som er eldre enn)")

If d ="" Or IsNumeric(d) = False Then wscript.quit

Set Path = oShell.BrowseForFolder (0,"Velg slette-Mappe:",0,0)

Set fso = CreateObject("Scripting.FileSystemObject")

Set f = fso.GetFolder(Path)

Set files=f.Files

For Each fl in files

if DateDiff("d",fl.DateCreated,now) > CInt(d) Then

fso.DeleteFile(f & "\" & fl.name)

End if

Next

 

Lagre scriptet med etternavnet vbs som f.eks. slette.vbs, dobbelklikk script-ikonet, og du er i gang.

Heisann, og takker for hjelpen, men får dette ikke til å fungere. Jeg får opp dialogboksen som spør etter antall dager, og så får jeg opp dialogboksen som bestemmer mappen, men når jeg trykker på ok, skjer det ingen ting..

7733621[/snapback]

1. Tast inn antall dager, f.eks. 5

2. Velg mappe der filene skal slettes, klikk ok

3. Se i mappen, der skal filene være borte som er mer enn f.eks. 5 dager gamle.

 

Filslettingen går automatisk etter at du har valgt mappe og klikket ok!

 

Edit. Hvis du limer inn noen gamle filer i en ny mappe for liksom å teste, fungerer ikke scriptet, fordi filene i den nye mappe blir regnet som nye filer i windows! Så du må teste på filer i en gammel mappe der filene er gamle.

Endret av backup

Har rettet en feil i scriptet. Her er den nye versjon som bør funke:

 

Set oShell = CreateObject("Shell.Application")

d = InputBox("Tast inn antall dager" & vbcrlf _

& "(slette filer som er eldre enn)")

If d ="" Or IsNumeric(d) = False Then wscript.quit

Set Path = oShell.BrowseForFolder (0,"Velg slette-Mappe:",0,0)

Set folderPath= Path.Items.Item

Folder = folderPath.path

Set fso = CreateObject("Scripting.FileSystemObject")

Set f = fso.GetFolder(Folder)

Set files=f.Files

For Each fl in files

if DateDiff("d",fl.DateCreated,now) > CInt(d) Then

fso.DeleteFile(f & "\" & fl.name)

End if

Next

 

Rapporter hvordan det funker hos deg. Takker for ditt samarbeid!

Har laget følgende vbs-script som skal gjøre jobben i den valgte mappe alle submapper innen den valgte mappe, men test og og rapporter tilbake.

 

Dim arrFolders(), vFolder

intSize = 0 : strComputer = "."

Set oShell = CreateObject("Shell.Application")

d = InputBox("Tast inn antall dager" & vbcrlf _

& "(slette filer som er eldre enn.)")

If d ="" Or IsNumeric(d) = False Then wscript.quit

Set fso = CreateObject("Scripting.FileSystemObject")

On Error Resume next

Set cCommand = CreateObject("Scripting.FileSystemObject")

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set oShell = CreateObject("Shell.Application")

c = "Velg slette-Mappe:"

Set Path = oShell.BrowseForFolder (0,c,0,0)

Set folderPath= Path.Items.Item

strFolderName = folderPath.path

Set colSubfolders = objWMIService.ExecQuery _

("Associators of {Win32_Directory.Name='" _

& strFolderName & "'} " & "Where AssocClass = Win32_Subdirectory " _

& "ResultRole = PartComponent")

ReDim Preserve arrFolders(intSize)

arrFolders(intSize) = strFolderName

intSize = intSize + 1

For Each objFolder in colSubfolders

GetSubFolders strFolderName

Next

Sub GetSubFolders(strFolderName)

Set colSubfolders2 = objWMIService.ExecQuery _

("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _

& "Where AssocClass = Win32_Subdirectory " & "ResultRole = PartComponent")

For Each objFolder2 in colSubfolders2

strFolderName = objFolder2.Name

ReDim Preserve arrFolders(intSize)

arrFolders(intSize) = strFolderName

intSize = intSize + 1

GetSubFolders strFolderName

Next : End Sub

For i = Ubound(arrFolders) to 0 Step -1

strFolder = arrFolders(i)

set vFolder = CCommand.GetFolder(strFolder)

Set f = fso.GetFolder(vFolder)

Set files=f.Files

For Each fl in files

if DateDiff("d",fl.DateCreated,now) > CInt(d) Then

fso.DeleteFile(f & "\" & fl.name)

End if

Next

Next :

MsgBox("Ferdig")

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...