[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何删除某目录下的固定文件夹中指定日期的规则文件?[结帖]

本帖最后由 lky216 于 2013-4-30 15:50 编辑

公司的一些计算机,有一个D:\user\,是客户的文件夹集合,里面都是客户设置的英文名称的子文件夹,各个客户(例:A;B;AAC)的目录下又有两个文件夹,1:log,2:doc
现在由于log日志占用了很大的空间,想删除指定日期前的log文件,

由于doc文件夹可能过多的文件,现在想直接在D:\user中,直接搜索log文件夹下的指定日期之前的ex*.log日志文件删除,保留这个日期之后的日志文件。而不搜索doc,从而提高运行效率。
或者是直接搜索,D:\user\*\log这个意思的,doc文件夹实在大

我是新手,只操作了搜索D:\user整个目录的,有800个客户,运行了8分钟才操作了一部分。
我在C盘测试,用了一秒就删除了测试用的ex*.log文件,可见D:\user有太多东西了。

我用论坛里的代码:
  1. @echo off
  2. ::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
  3. ::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
  4. ::本例调用了临时VBS代码进行日期计算,并统一设置系统日期格式,处理完毕
  5. ::之后再把日期格式恢复成原来的状态。摆脱了对reg命令(XP系统自带)的依赖。
  6. rem 指定待删除文件的存放路径
  7. set SrcDir=C:\Test\BatHome
  8. rem 指定天数
  9. set DaysAgo=1
  10. >"%temp%\BackupDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  11. >>"%temp%\BackupDate.vbs" echo WScript.Echo WshShell.RegRead ("HKEY_CURRENT_USER\Control Panel\International\sShortDate")
  12. for /f %%a in ('cscript /nologo "%temp%\BackupDate.vbs"') do (
  13.     set "RegDateOld=%%a"
  14. )
  15. >"%temp%\UnifyDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  16. >>"%temp%\UnifyDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "yyyy-M-d", "REG_SZ"
  17. cscript /nologo "%temp%\UnifyDate.vbs"
  18. >"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
  19. >>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
  20. >>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
  21. for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
  22.     set "DstDate=%%a"
  23. )
  24. set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
  25. for /r "%SrcDir%" %%a in (*.*) do (
  26.     if "%%~ta" leq "%DstDate%" (
  27.         if exist "%%a" (
  28.             echo del /f /q "%%a"
  29.         )
  30.     )
  31. )
  32. >"%temp%\RecoverDate.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
  33. >>"%temp%\RecoverDate.vbs" echo WshShell.RegWrite "HKEY_CURRENT_USER\Control Panel\International\sShortDate", "%RegDateOld%", "REG_SZ"
  34. cscript /nologo "%temp%\RecoverDate.vbs"
  35. pause
复制代码
27楼结帖子

在此先谢谢各位了,如果可以的话 帮忙指点下 感激不尽

TOP

你这个代码是从哪里抄的?是不是抄漏了一部分

TOP

回复 3# BAT-VBS

不好意思 少了一行,我重新弄了,这个是从论坛复制的源文件,
我只是修改了路径和天数,以及echo去掉,就是没有显示要删除的文件了,直接删除了的意思
还有文件*.*我改为ex*.log

TOP

回复 4# lky216


    然后呢?你的问题是什么呢?

TOP

本帖最后由 terse 于 2013-4-13 18:38 编辑

试试WMIC 日期问题不通用
  1. @echo off
  2. set "fd=20130101"
  3. set "ph=D:\user\log\"
  4. for /f "tokens=*" %%i in ("%ph%") do set d=%%~di&set "p=%%~pi"
  5. wmic datafile where "drive='%d%' and path='%p:\=\\%' and FileName like 'ex%%' and extension='log' and LastModified<'%fd%'" call delete
复制代码

TOP

回复 5# BAT-VBS

我应该写得有清楚了吧,就是清理日志文件。因为一个客户一天一个日志,也挺多的空间占用
全文件夹下搜索太慢,因为doc很多文件。
就是直接跳过doc去搜索log的

TOP

回复 6# terse

谢谢 我吃饭完就试试看

TOP

回复 6# terse

这个路径是不是有点问题,800多个客户,甚至是1300多个,
D:\user\A_client\log\
D:\user\A_client\doc\
不要搜索D:\user\A_client\doc\这个类似的目录的
客户有很多。A_client client_Z  XIAMEN_liworld 等等不固定的客户名字。我之前有说了。
是log doc是固定的

TOP

回复 9# lky216
这个是绝对路径 "D:\user\log\"
也就是代码只操作 "D:\user\log\"里  log 文件

TOP

顶楼主的小屁屁。

TOP

回复 10# terse
没有这个文件夹,只有d:\user\clinet_name\log

TOP

回复 11# pclshuke


    你会被和谐的

TOP

回复 12# lky216
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "fd=20130101"
  4. for /d %%a in ("D:\user\*") do (
  5.     for /f "tokens=*" %%i in ("%%a\log") do (
  6.         set "d=%%~di"
  7.         set "p=%%~pi"
  8.     )
  9.     wmic datafile where "drive='!d!' and path='!p:\=\\!' and FileName like 'ex%%' and extension='log' and LastModified<'%fd%'" call delete
  10. )
复制代码

TOP

回复 14# BAT-VBS


    我试试看,中午用了10帖,不能回复,忘记了

TOP

返回列表