标题: [文本处理] 批处理如何删除指定文件夹下修改日期小于当前日期前一天(昨天)的文件? [打印本页]
作者: liuwl03 时间: 2010-2-9 19:14 标题: 批处理如何删除指定文件夹下修改日期小于当前日期前一天(昨天)的文件?
本帖最后由 pcl_test 于 2016-7-16 14:21 编辑
领教了版主的批处理功力后,今天第二次来求救,呵。
大体情况如下:
在一个文件夹里,有若干个文件夹,命名规则是当前年份,如 2008 、2009、2010
每个文件夹里有以月份为文件夹名的文件夹,月份里则是天数的文件名,天数里才是最终的文件。
以一个文件为例 2009\10\14\不规则的文件名.jpg
要实现的效果:
每天运行一次批处理文件,删除文件创建时间 小于 当前时间减一天 的文件或文件夹。
不知小弟说的是否清楚。
实在想不到解决的方法,不知道各位版主、大侠们能否帮忙解决,万分感谢 ^_^
作者: sysplay 时间: 2010-2-10 01:18
是不是最终只保留当天的文件或者文件夹?
作者: slovent 时间: 2010-2-10 10:10
你看看下面的代码行不行,修改一些前辈的代码给自己使用的。
同这个文件一起建一个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
复制代码
作者: liuwl03 时间: 2010-2-23 17:01
找到答案了
Forfiles /S /P c:\tmpfiles\ /D -1 /M *.* /C "cmd /c del /S /Q @file"
作者: 菜鸟一个 时间: 2012-4-15 09:01
回复 4# liuwl03
我也有这样的问题..请问 你是怎么写的 批处理..我想借鉴下..我是要删除30天的文件夹...文件夹里面有些是有文件.有些没有的..
达到的效果是:
通过运行批处理 删除指定时间的前30天的文件夹(我的文件夹是 2012-1-1 2012-4-15 这样来命名的)
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |