批处理文件以删除早于指定日期的文件 [英] batch file to delete files older than a specified date

查看:22
本文介绍了批处理文件以删除早于指定日期的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何创建批处理文件以删除早于指定日期的文件?

这似乎不起作用;

:: --------DELOLD.BAT---------@回声关闭SET OLDERTHAN=%1如果没有定义早于 GOTO 语法for/f "tokens=2" %%i in ('date/t') do set thedate=%%i类型 %1暂停设置 mm=%thedate:~0,2%设置 dd=%thedate:~3,2%设置 yyyy=%thedate:~6,4%设置/A dd=%dd% - %OLDERTHAN%设置/A mm=%mm% + 0如果/I %dd% GTR 0 转到完成设置/A mm=%mm% - 1如果/I %mm% GTR 0 转到 ADJUSTDAY设置/A mm=12设置/A yyyy=%yyyy% - 1:调整日如果 %mm%==1 转到 SET31如果 %mm%==2 转到 LEAPCHK如果 %mm%==3 转到 SET31如果 %mm%==4 转到 SET30如果 %mm%==5 转到 SET31如果 %mm%==6 转到 SET30如果 %mm%==7 转到 SET31如果 %mm%==8 转到 SET31如果 %mm%==9 转到 SET30如果 %mm%==10 转到 SET31如果 %mm%==11 转到 SET30如果 %mm%==12 转到 SET31转到错误:SET31设置/Add=31 + %dd%转到完成:SET30设置/Add=30 + %dd%转到完成:LEAPCHK设置/A tt=%yyyy% %% 4如果不是 %tt%==0 转到 SET28设置/A tt=%yyyy% %% 100如果不是 %tt%==0 转到 SET29设置/A tt=%yyyy% %% 400如果 %tt%==0 转到 SET29:SET28设置/Add=28 + %dd%转到完成:SET29设置/Add=29 + %dd%:完毕如果/i %dd% LSS 10 设置 dd=0%dd%如果/I %mm% LSS 10 设置 mm=0%mm%对于 (*.*) 中的 %%i 做 (设置文件名=%%i调用 :PROCESSFILE %%~ti)设置毫米=设置 yyyy=设置 dd=设置日期=转到退出:句法回声.回声用法:ECHO DELOLD XECHO 其中 X 是今天之前的天数.回声.ECHO EX: "DELOLD 5" 删除超过 5 天的文件.转到出口:进程文件设置温度=%1设置 fyyyy=20%temp:~6%设置 fmm=%temp:~0,2%设置 fdd=%temp:~3,2%if/I %fyyyy% GTR 2069 set fyyyy=19%temp:~6%:: *******************************************:: * 这是文件被删除的地方 *:: * 将 ECHO 命令更改为 DEL 为 *:: * 删除.ECHO 用于测试.*:: *******************************************如果/I %yyyy%/%mm%/%dd% GEQ %fyyyy%/%fmm%/%fdd% (ECHO %文件名%)设置温度=设置 fyyyy=设置 fmm=设置 fdd=:出口:: ----------END-DELOLD.BAT-------------

解决方案

如果您使用的是 Windows Server 和/或安装了服务器资源工具包,forfiles 可能正是您要找的.

示例:打印所有文件名,早于 180 天

forfiles/S/D -180/C "cmd/C Echo @Path" >olderthan180days.txt

删除所有超过 365 天的 PDF 文件

forfiles/S/M *.pdf/D -365/C "cmd/C Del @Path"

How do I create a batch file to delete files older than a specified date?

This does not seem to work;

:: --------DELOLD.BAT----------
@echo off
SET OLDERTHAN=%1
IF NOT DEFINED OLDERTHAN GOTO SYNTAX

for /f "tokens=2" %%i in ('date /t') do set thedate=%%i
type %1
pause
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

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

goto ERROR

:SET31
set /A dd=31 + %dd%
goto DONE

:SET30
set /A dd=30 + %dd%
goto DONE

: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 DONE

: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 (*.*) do (
set FileName=%%i
call :PROCESSFILE %%~ti
)

set mm=
set yyyy=
set dd=
set thedate=
goto EXIT

:SYNTAX
ECHO.
ECHO USAGE:
ECHO DELOLD X
ECHO   Where X is the number of days previous to Today.
ECHO.
ECHO EX: "DELOLD 5" Deletes files older than 5 days.
GOTO EXIT

:PROCESSFILE
set temp=%1
set fyyyy=20%temp:~6%
set fmm=%temp:~0,2%
set fdd=%temp:~3,2%
if /I %fyyyy% GTR 2069 set fyyyy=19%temp:~6%


:: ***************************************
:: * 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-DELOLD.BAT-------------

解决方案

If you're on a Windows Server and/or have the Server Resource Kit installed, forfiles may be exactly what you're looking for.

Examples: print all file names, older than 180 days

forfiles /S /D -180 /C "cmd /C Echo @Path" >olderthan180days.txt

delete all PDF files, older than 365 days

forfiles /S /M *.pdf /D -365 /C "cmd /C Del @Path"

这篇关于批处理文件以删除早于指定日期的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆