原文连接: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` 是 Windows 操作系统内置的一个强大工具,它允许用户基于文件的最后修改日期来执行各种命令,比如复制、移动或者删除文件等操作。...
### 使用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件 在Windows操作系统中,经常会遇到需要清理系统中的老旧文件来释放磁盘空间或维护系统整洁的情况。本文将详细介绍如何通过批处理命令来实现对指定...
总的来说,通过编写批处理脚本并结合任务计划程序,我们可以自动化删除特定天数外的超时文件,这在系统维护和数据管理中具有重要意义。务必谨慎操作,确保在执行任何删除操作之前备份重要数据。
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。 ::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。 ::本例需要Win2003/Vista/Win7系统自带的forfiles命令的支持 如果XP需要...
- **目标三:**自动删除超过指定天数的备份文件,以避免磁盘空间不足的问题。 #### 二、批处理脚本详解 ##### 2.1 脚本概述 本文提供的批处理脚本实现了上述三个目标,通过一系列命令自动化完成整个备份过程。该...
### Windows下使用批处理文件.bat删除旧文件 在日常的计算机维护工作中,清理无用的旧文件是一项重要的任务。这不仅能够释放磁盘空间,还能提高系统的运行效率。本文将详细介绍如何通过创建批处理文件(.bat)来...
具体来说,它能够删除指定路径下指定天数之前的文件,这里的时间判断依据是文件的最后修改日期。通过这种方式,用户可以方便地清理不再需要的老文件。 #### 二、脚本工作原理 为了实现这一功能,脚本采用了以下步骤...
本文将深入解析如何使用批处理脚本(bat)来自动删除N天前的文件,这是一个常见的需求,尤其是在数据管理、日志清理等场景中。 ### 核心知识点:批处理脚本自动删除N天前的文件 #### 1. 批处理脚本(bat)简介 ...
这个脚本首先定义了日志路径和要删除的天数,然后计算出指定日期前的日期,并使用`FORFILES`命令删除所有符合日期条件的.log文件。 2. **删除n天以前的文件夹脚本**: 对于文件夹的清理,可以使用`WMIC`命令,...
然后,为了删除特定日期前的日志文件,我们需要编写一个批处理文件(`.bat`文件),如`删除5天以前的catalina文件.bat`所示。这个文件包含一个CMD脚本,用于找出并删除指定日期前的日志文件。以下是一个基本的脚本...
- 该脚本用于删除指定日期之前的文件。 - 用户可以通过输入一个正整数来指定需要回溯多少天前的日期。 - 脚本内部通过一系列复杂的计算实现了日期的加减运算。 **脚本结构与实现逻辑**: 1. **初始化环境**: - ...
在Windows环境下实现数据备份并上传至FTP服务器,同时删除指定天数前的备份文件,是一个既涉及系统操作又关联网络传输的IT运维任务。此操作有利于提高数据的安全性,通过远程备份的方式减少本地数据丢失的风险。下面...
4. **条件语句**:如果需要限制保留的备份天数,脚本可能包含`if`或`if not`语句,删除超过指定天数的旧备份。 5. **日志记录**:为了追踪和排查问题,脚本通常会将执行过程和结果输出到日志文件,如`echo`命令和`>...
本文将详细探讨如何使用批处理(BAT)脚本来删除指定日期之前的备份文件夹,以"删除D盘数据库备份gw30天前的备份--只能用于windows2003以上系统份"为例,讲解这一过程。 首先,我们需要了解什么是批处理脚本。...
4. **保留或清理旧日志**:为了保持服务器磁盘空间的整洁,批处理程序还可以包含清理旧日志的逻辑,比如删除超过一定天数的旧日志文件。 5. **日志归档**:打包后的日志文件可以被移动到一个安全的位置,如网络共享...
- `/d-14`: 选择日期为14天之前的文件。 - `/c "cmd /c del @path"`: 对符合条件的文件执行删除操作。 #### 五、注意事项与最佳实践 1. **测试脚本**: 在正式环境中使用前,先在一个测试环境中验证脚本的正确性。 ...