你看看下面的代码行不行,修改一些前辈的代码给自己使用的。
同这个文件一起建一个NoDelFile.lst文本格式的文件,在这个文件里放一些你想保留的文件名即可做到忽略删除的功能。
NoDelFile.lst 文件内容如下:
- ::------------------该部分为脚本保留文件--------------------
- ::BySlovEnt
- ::如需临时忽略文件,只需在文件前加上:号,即可被脚本忽略保留而进行常规删除
- :Test.txt -- 如果该文件存在,依旧会在符合条件的情况下被删除
- ::该文件内不支持任何形式的通配符
- ::如需注释文件,可以在文件后使用“空格”并加以说明,如下列
- CallBAT.bat
- DelFileDaysAgo.bat -- 该文件为脚本核心文件,不能删除
- NoDelFile.lst -- 该文件为脚本核心文件,不能删除
- DelFolderDaysAgo.bat -- 该文件为脚本核心文件,不能删除
- NoDelFolder.lst -- 该文件为脚本核心文件,不能删除
- ::---------------------请勿删除以上字段----------------------
-
- ::----------------以下为用户自定义文件名列表-----------------
复制代码
- @ECHO OFF
- :: 删除指定目录、指定天数之前(以文件的最后修改日期为准)的文件,并可排除NoDel文本文件中罗列的文件;
- :: 本代码调用了临时VBS代码进行日期计算;
- :: 为兼容不同的日期格式,调用REG命令(Win2003系统自带)统一设置日期格式,
- :: 处理完毕之后再把日期格式恢复成原来的状态。
- :: 使用方法示例:DelFileDaysAgo.bat Path Days ("DelFileDaysAgo.bat D:\CHENHUI\ 15" 删除所有D盘下CHENHUI文件夹中超过15天的文件)
-
- REM 指定待删除文件的存放路径
- SET SrcPath="%1"
- REM 指定天数
- SET Days="%2"
-
- REM 也可用以下方式直接设置变量
- :: SET SrcPath=D:\CHENHUI\
- REM 指定天数
- :: SET Days=15
-
- REM 备份日期
- >"%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"
- )
-
- REM 设置日期为标准格式YYYY-M-D
- >"%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"
-
- REM 进行日期计算
- >"%TEMP%\DstDate.vbs" ECHO LastDate=date()-%Days%
- >>"%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 /F "EOL=: Tokens=1 Delims= " %%a IN (NoDelFile.lst) DO SET %%~a=a
- FOR /R "%SrcPath%" %%a IN (*) DO (
- IF "%%~ta" LEQ "%DstDate%" (
- IF EXIST "%%a" (
- IF NOT Defined %%~nxa DEL /F /Q "%%a"
- )
- )
- )
-
- REM 恢复系统日期格式
- >"%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"
-
- REM 清除脚本运行时产生的临时文件
- DEL "%TEMP%\UnifyDate.vbs"
- DEL "%TEMP%\RecoverDate.vbs"
- DEL "%TEMP%\DstDate.vbs"
- DEL "%TEMP%\BackupDate.vbs"
- ECHO 指定文件已全部删除,请前往目标路径检查执行结果。
- ECHO 按任意键退出
- :: Pause>nul
复制代码
|