`

批处理删除指定天数日期之前的文件

阅读更多

原文连接:http://bbs.bathome.net/thread-3334-1-1.html

【方案一】删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + REG + VBS

 

@echo off
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例调用了临时VBS代码进行日期计算
::本例为兼容不同的日期格式,调用reg命令(XP系统自带)统一设置日期格式,
::处理完毕之后再把日期格式恢复成原来的状态。

rem 指定待删除文件的存放路径
set SrcDir=C:\Test\BatHome
rem 指定天数
set DaysAgo=1
for /f "delims=" %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do (
    set "RegDateOld=%%a"
)
set RegDateOld=%RegDateOld:~-8%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
>"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
for /r "%SrcDir%" %%a in (*.*) do (
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a" (
            echo del /f /q "%%a"
        )
    )
)
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
pause

 【方案二】删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + REG + Ritchie Lawrence 日期函数

 

 

@echo off
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例调用了 Ritchie Lawrence 的日期函数进行日期计算
::日期转换的核心算法请参考http://bbs.bathome.cn/thread-3056-1-1.html
::本例为兼容不同的日期格式,调用reg命令(XP系统自带)统一设置日期格式,
::处理完毕之后再把日期格式恢复成原来的状态。

rem 指定待删除文件的存放路径
set SrcDir=C:\Test\BatHome
rem 指定天数
set DaysAgo=1
for /f "delims=" %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do (
    set "RegDateOld=%%a"
)
set RegDateOld=%RegDateOld:~-8%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
set /a PassDays-=%DaysAgo%
call :DaysToDate %PassDays% DstYear DstMonth DstDay
set DstDate=%DstYear%-%DstMonth%-%DstDay%
for /r "%SrcDir%" %%a in (*.*) do (
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a" (
            echo del /f /q "%%a"
        )
    )
)
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
pause
goto :eof

:DateToDays %yy% %mm% %dd% days
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :EOF

:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF

 【方案三】删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件:BAT + VBS

 

 

@echo off
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例调用了临时VBS代码进行日期计算,并统一设置系统日期格式,处理完毕
::之后再把日期格式恢复成原来的状态。摆脱了对reg命令(XP系统自带)的依赖。

rem 指定待删除文件的存放路径
set SrcDir=C:\Test\BatHome
rem 指定天数
set DaysAgo=1
>"%temp%\BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control Panel\International\sShortDate")
for /f %%a in ('cscript /nologo "%temp%\BackupDate.vbs"') do (
    set "RegDateOld=%%a"
)
>"%temp%\UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
cscript /nologo "%temp%\UnifyDate.vbs"
>"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
    set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
for /r "%SrcDir%" %%a in (*.*) do (
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a" (
            echo del /f /q "%%a"
        )
    )
)
>"%temp%\RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
cscript /nologo "%temp%\RecoverDate.vbs"
pause

 【方案四】删除指定路径下指定天数之前(以文件的创建日期为准)的文件:BAT + REG + Ritchie Lawrence 日期函数

 

@echo off
::演示:删除指定路径下指定天数之前(以文件的创建日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例调用了 Ritchie Lawrence 的日期函数进行日期计算
::日期转换的核心算法请参考http://bbs.bathome.cn/thread-3056-1-1.html
::本例为兼容不同的日期格式,调用reg命令(XP系统自带)统一设置日期格式,
::处理完毕之后再把日期格式恢复成原来的状态。

rem 指定待删除文件的存放路径
set SrcDir=C:\Test\BatHome
rem 指定天数
set DaysAgo=1
for /f "delims=" %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do (
    set "RegDateOld=%%a"
)
set RegDateOld=%RegDateOld:~-8%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
set /a PassDays-=%DaysAgo%
call :DaysToDate %PassDays% DstYear DstMonth DstDay
set DstDate=%DstYear%-%DstMonth%-%DstDay%

for /f "delims=/" %%a in ('dir /s /b /a-d "%SrcDir%"') do (
    call :CompareTime "%%a"
)
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
pause
goto :eof

:DateToDays %yy% %mm% %dd% days
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :EOF

:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF

:CompareTime
for /f "skip=5 tokens=1-2 delims= " %%h in ('dir /a-d /tc %1') do (
    if "%%h" leq "%DstDate%" (
        if exist %1 (
            echo del /a /f /q %1
        )
    )
    goto :eof
)

 【方案五】删除指定路径下指定天数之前(以文件的修改日期为准)的文件:forfiles

@echo off
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例需要Win2003/Vista/Win7系统自带的forfiles命令的支持

rem 指定待删除文件的存放路径
set SrcDir=C:\Test\BatHome
rem 指定天数
set DaysAgo=1

forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c echo del /f /q /a @path"
pause

 【方案六】删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件:字符串截取

@echo off
::演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例假设文件名中包含的日期字符串(比如:bak-2009-12-25.log)

rem 指定待删除文件的存放路径
set SrcDir=C:\Test\BatHome
rem 指定天数
set DaysAgo=1

>"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
  set "DstDate=%%a"
)
set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%

setlocal enabledelayedexpansion
for /r "%SrcDir%" %%a in (*.*) do (
    set "FileDate=%%~na"
    set "FileDate=!FileDate:~4,10!"
    if "!FileDate!" leq "%DstDate%" (
        if exist "%%a" (
            echo del /f /q "%%a"
        )
    )
)
endlocal
pause

 

分享到:
评论

相关推荐

    删除指定日期文件的批处理脚本

    演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。如果演示结果无误,把del前面的echo去掉,即可实现真正删除。

    删除指定目录下指定天数之前的文件

    通过以上分析,我们可以看出,利用批处理脚本结合`forfiles`命令,能够有效地实现对指定目录下指定天数之前文件的自动化删除。这种方法不仅提高了工作效率,还减少了人为操作的错误。对于需要频繁进行文件管理的用户...

    forfiles 批处理删除文件

    ### forfiles 批处理删除文件知识点详解 #### 一、forfiles 命令概述 `forfiles` 是 Windows 操作系统内置的一个强大工具,它允许用户基于文件的最后修改日期来执行各种命令,比如复制、移动或者删除文件等操作。...

    用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件

    ### 使用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件 在Windows操作系统中,经常会遇到需要清理系统中的老旧文件来释放磁盘空间或维护系统整洁的情况。本文将详细介绍如何通过批处理命令来实现对指定...

    删除特定天数外的超时文件

    总的来说,通过编写批处理脚本并结合任务计划程序,我们可以自动化删除特定天数外的超时文件,这在系统维护和数据管理中具有重要意义。务必谨慎操作,确保在执行任何删除操作之前备份重要数据。

    利用forfiles自动删除7天前文件DOS批处理

    ::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。 ::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。 ::本例需要Win2003/Vista/Win7系统自带的forfiles命令的支持 如果XP需要...

    备份oracle数据库并保留指定天数(day)的备份文件(rar)

    - **目标三:**自动删除超过指定天数的备份文件,以避免磁盘空间不足的问题。 #### 二、批处理脚本详解 ##### 2.1 脚本概述 本文提供的批处理脚本实现了上述三个目标,通过一系列命令自动化完成整个备份过程。该...

    Windows下使用批处理文件.bat删除旧文件

    ### Windows下使用批处理文件.bat删除旧文件 在日常的计算机维护工作中,清理无用的旧文件是一项重要的任务。这不仅能够释放磁盘空间,还能提高系统的运行效率。本文将详细介绍如何通过创建批处理文件(.bat)来...

    非常实用的dos批量删除工具

    具体来说,它能够删除指定路径下指定天数之前的文件,这里的时间判断依据是文件的最后修改日期。通过这种方式,用户可以方便地清理不再需要的老文件。 #### 二、脚本工作原理 为了实现这一功能,脚本采用了以下步骤...

    自动删除N天前的文件

    本文将深入解析如何使用批处理脚本(bat)来自动删除N天前的文件,这是一个常见的需求,尤其是在数据管理、日志清理等场景中。 ### 核心知识点:批处理脚本自动删除N天前的文件 #### 1. 批处理脚本(bat)简介 ...

    清理window电脑、服务器日志bat脚本

    这个脚本首先定义了日志路径和要删除的天数,然后计算出指定日期前的日期,并使用`FORFILES`命令删除所有符合日期条件的.log文件。 2. **删除n天以前的文件夹脚本**: 对于文件夹的清理,可以使用`WMIC`命令,...

    CMD 命令 删除几天前的日志

    然后,为了删除特定日期前的日志文件,我们需要编写一个批处理文件(`.bat`文件),如`删除5天以前的catalina文件.bat`所示。这个文件包含一个CMD脚本,用于找出并删除指定日期前的日志文件。以下是一个基本的脚本...

    CMD脚本-时间相关

    - 该脚本用于删除指定日期之前的文件。 - 用户可以通过输入一个正整数来指定需要回溯多少天前的日期。 - 脚本内部通过一系列复杂的计算实现了日期的加减运算。 **脚本结构与实现逻辑**: 1. **初始化环境**: - ...

    windows备份文件夹及子文件bat脚本.rar

    4. **条件语句**:如果需要限制保留的备份天数,脚本可能包含`if`或`if not`语句,删除超过指定天数的旧备份。 5. **日志记录**:为了追踪和排查问题,脚本通常会将执行过程和结果输出到日志文件,如`echo`命令和`>...

    Windows下通过FTP自动备份数据到服务器并删除指定天数前的备份

    在Windows环境下实现数据备份并上传至FTP服务器,同时删除指定天数前的备份文件,是一个既涉及系统操作又关联网络传输的IT运维任务。此操作有利于提高数据的安全性,通过远程备份的方式减少本地数据丢失的风险。下面...

    删除以前的备份文件夹

    本文将详细探讨如何使用批处理(BAT)脚本来删除指定日期之前的备份文件夹,以"删除D盘数据库备份gw30天前的备份--只能用于windows2003以上系统份"为例,讲解这一过程。 首先,我们需要了解什么是批处理脚本。...

    IIS 日志管理程序

    4. **保留或清理旧日志**:为了保持服务器磁盘空间的整洁,批处理程序还可以包含清理旧日志的逻辑,比如删除超过一定天数的旧日志文件。 5. **日志归档**:打包后的日志文件可以被移动到一个安全的位置,如网络共享...

    bat使用forfiles自动批量删除过期文件

    - `/d-14`: 选择日期为14天之前的文件。 - `/c "cmd /c del @path"`: 对符合条件的文件执行删除操作。 #### 五、注意事项与最佳实践 1. **测试脚本**: 在正式环境中使用前,先在一个测试环境中验证脚本的正确性。 ...

Global site tag (gtag.js) - Google Analytics