找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 123284|回复: 34

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

[复制链接]
发表于 2013-4-10 22:16:34 | 显示全部楼层 |阅读模式
本帖最后由 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楼结帖子
 楼主| 发表于 2013-4-10 22:18:27 | 显示全部楼层
在此先谢谢各位了,如果可以的话 帮忙指点下 感激不尽
发表于 2013-4-11 18:30:53 | 显示全部楼层
你这个代码是从哪里抄的?是不是抄漏了一部分
 楼主| 发表于 2013-4-12 14:20:38 | 显示全部楼层
回复 3# BAT-VBS

不好意思 少了一行,我重新弄了,这个是从论坛复制的源文件,
我只是修改了路径和天数,以及echo去掉,就是没有显示要删除的文件了,直接删除了的意思
还有文件*.*我改为ex*.log
发表于 2013-4-12 21:26:57 | 显示全部楼层
回复 4# lky216


    然后呢?你的问题是什么呢?
发表于 2013-4-13 18:35:40 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2013-4-14 12:35:35 | 显示全部楼层
回复 5# BAT-VBS

我应该写得有清楚了吧,就是清理日志文件。因为一个客户一天一个日志,也挺多的空间占用
全文件夹下搜索太慢,因为doc很多文件。
就是直接跳过doc去搜索log的
 楼主| 发表于 2013-4-14 12:35:58 | 显示全部楼层
回复 6# terse

谢谢 我吃饭完就试试看
 楼主| 发表于 2013-4-14 14:57:49 | 显示全部楼层
回复 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是固定的
发表于 2013-4-14 16:04:31 | 显示全部楼层
回复 9# lky216
这个是绝对路径 "D:\user\log\"
也就是代码只操作 "D:\user\log\"里  log 文件
发表于 2013-4-14 16:11:14 | 显示全部楼层
顶楼主的小屁屁。
 楼主| 发表于 2013-4-14 16:12:33 | 显示全部楼层
回复 10# terse
没有这个文件夹,只有d:\user\clinet_name\log
 楼主| 发表于 2013-4-14 16:17:22 | 显示全部楼层
回复 11# pclshuke


    你会被和谐的
发表于 2013-4-14 16:38:21 | 显示全部楼层
回复 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. )
复制代码
 楼主| 发表于 2013-4-14 19:57:51 | 显示全部楼层
回复 14# BAT-VBS


    我试试看,中午用了10帖,不能回复,忘记了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 05:55 , Processed in 0.018439 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表