Batchbestand om bestanden ouder dan N dagen te verwijderen

Ik ben op zoek naar een manier om alle bestanden ouder dan 7 dagen in een batchbestand te verwijderen. Ik heb op internet gezocht en enkele voorbeelden gevonden met honderden regels code, en andere waarvoor extra opdrachtregelhulpprogramma’s moesten worden geïnstalleerd om de taak te volbrengen.

Vergelijkbare dingen kunnen in BASH worden gedaanin slechts een paar regels code. Het lijkt erop dat er op zijn minst iets eenvoudigs kan worden gedaan voor batchbestanden in Windows. Ik ben op zoek naar een oplossing die werkt in een standaard Windows-opdrachtprompt, zonder extra hulpprogramma’s. Gelieve ook geen PowerShell of Cygwin.


Antwoord 1, autoriteit 100%

Geniet van:

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"

Zie de forfilesdocumentatievoor meer details.

Raadpleeg voor meer goodies An AZ Index of the Windows XP command line.

Als je forfilesniet op je computer hebt geïnstalleerd, kopieer het dan van een Windows Server 2003naar uw Windows XP-machine op %WinDir%\system32\. Dit is mogelijk omdat de EXE volledig compatibel is tussen Windows Server 2003 en Windows XP.

Latere versies van Windows en Windows Server hebben het standaard geïnstalleerd.

Voor Windows 7 en nieuwer (inclusief Windows 10):

De syntaxis is een beetje veranderd. Daarom is de bijgewerkte opdracht:

forfiles /p "C:\what\ever" /s /m *.* /D -<number of days> /C "cmd /c del @path"

Antwoord 2, Autoriteit 7%

Voer het volgende uit de volgende opdrachten :

ROBOCOPY C:\source C:\destination /mov /minage:7
del C:\destination /q

Verplaats alle bestanden (met / mov, die bestanden beweegt en verwijdert ze in plaats daarvan in plaats van / verplaatsen die hele filetrees beweegt die vervolgens via Robocopy naar een andere locatie worden verwijderd) en vervolgens een verwijderingsopdracht op dat pad en u vervolgens uitvoeren helemaal goed.

Ook als u een map met veel gegevens hierin kunt gebruiken, kunt u /mirschakelen

gebruiken


Antwoord 3, Autoriteit 2%

Ok was een beetje verveeld en kwam hiermee op, die mijn versie van de Linux-epoch vervangen van mijn versie bevat voor het dagelijkse gebruik (geen tijdretentie):

7DaySclean.cmd

@echo off
setlocal ENABLEDELAYEDEXPANSION
set day=86400
set /a year=day*365
set /a strip=day*7
set dSource=C:\temp
call :epoch %date%
set /a slice=epoch-strip
for /f "delims=" %%f in ('dir /a-d-h-s /b /s %dSource%') do (
    call :epoch %%~tf
    if !epoch! LEQ %slice% (echo DELETE %%f ^(%%~tf^)) ELSE echo keep %%f ^(%%~tf^)
)
exit /b 0
rem Args[1]: Year-Month-Day
:epoch
    setlocal ENABLEDELAYEDEXPANSION
    for /f "tokens=1,2,3 delims=-" %%d in ('echo %1') do set Years=%%d& set Months=%%e& set Days=%%f
    if "!Months:~0,1!"=="0" set Months=!Months:~1,1!
    if "!Days:~0,1!"=="0" set Days=!Days:~1,1!
    set /a Days=Days*day
    set /a _months=0
    set i=1&& for %%m in (31 28 31 30 31 30 31 31 30 31 30 31) do if !i! LSS !Months! (set /a _months=!_months! + %%m*day&& set /a i+=1)
    set /a Months=!_months!
    set /a Years=(Years-1970)*year
    set /a Epoch=Years+Months+Days
    endlocal& set Epoch=%Epoch%
    exit /b 0

Gebruik

Other episodes