[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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楼结帖子

回复 33# Demon


    咦?老兄难道不使用缓存,怎么这么快就发现了...
    赶脚他说得有道理,就反了一下,唔,如此果然更有色狼啸月的味道

TOP

回复 33# Demon


    没有吧。。。他弄GIF图就潮了,两色变换中。。。

TOP

回复  lky216


    同名同姓
CrLf 发表于 2013-4-30 22:05


你还真把头像反色了啊

TOP

回复 30# lky216


    同名同姓

TOP

回复 29# apang


    我是新手啊,看不太懂,不过我保存了。。

TOP

回复 28# CrLf


  谢谢,总是能学习到一些东东,从前辈这里。
  exe的,我搜索怎么说是微软的

TOP

这样可以不?
  1. @echo off
  2. for /f "delims=" %%a in ('xcopy /d:05-01-2013 /ls *.log c:\') do set "%%a=1"
  3. for /r %%a in (*.log) do if not defined %%a echo %%a
  4. Rem 查找2013年5月1日之前修改的文件
  5. pause
复制代码

TOP

linux 的 find.exe 可以这样:
  1. find.exe 目录 -mtime +40
  2. rem 搜索目录下修改日期在 40 天前的文件
复制代码

TOP

本帖最后由 lky216 于 2013-4-30 16:05 编辑

回复 25# terse


    文件夹 PATH 列表
卷序列号为 E094-8C28
C:.
│  1.txt
│  
└─user
    │  新建 文本文档.txt
    │  
    ├─liky
    │  │  新建 文本文档.txt
    │  │  
    │  ├─doc
    │  └─log
    │          ex20130430.log
    │         
    └─wxh
        │  新建 文本文档.txt
        │  
        ├─doc
        │      新建 文本文档.txt
        │      
        └─log
                ex20130430.log
            代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "fd=20130501000000"
  4. set "d=c:"
  5. set "p=\user\"
  6. set "ext=log"
  7. for /f "tokens=*" %%p in ('dir /b /ad "%d%%p%"') do (
  8.     for /f "skip=1 tokens=1*" %%i in ('wmic datafile where "drive='%d%' and path='%p:\=\\%%%p\\log\\' and FileName
  9. like 'ex%%' and extension='%ext%'" get name^,LastModified') do (
  10.         for /f "tokens=1,2* delims=. " %%a in ("%%i %%j") do (
  11.            if "%%a" lss "%fd%" echo del "%%~fc"
  12.         )
  13.     )
  14. )
  15. pause
复制代码
echo结果
  1. del "c:\user\liky\log\ex20130430.log"
  2. del "c:\user\wxh\log\ex20130430.log"
  3. 请按任意键继续. . .
复制代码
可以了,去掉echo也可以了,谢谢。
当初显示和删除不一样。。。
标记下,日后回报。

另外,每N个客户如果没有日志文件的话,就会回显一行 无可用范例
把del的文件,echo保存为deldate.txt日志咯?

TOP

回复 25# terse


    最近忙死了。。。不好意思,一会我这边测试看看下给您回复。

TOP

回复 22# lky216
你什么环境  按理 ECHO 正常的话 不会删除同级目录下文件 WMIC 处理 NAME 是绝对路径的
方便的话 贴下 ECHO 结果

TOP

回复 23# lky216


改功能就加钱呗
功能没实现就减钱或者不给钱呗
这有什么不好结算的
你发帖时说给50,最后你愿意给500,又不会有人拦着你。

TOP

本帖最后由 lky216 于 2013-4-16 14:41 编辑

回复 21# BAT-VBS


    不好结算。说给*元,怕到时候要修改。如果运行的时候,没有满足所说的功能的话,要修改

TOP

本帖最后由 lky216 于 2013-4-16 14:11 编辑

回复 19# terse
没去掉echo的话,是正常的。中文的:"复件 ex20130415.log"就没有被删除,这个大概知道,是只查找英文的,我这边也是全英文的ex*.log
   
另外,把我批处理的同级目录文件删除了,在盘符根目录的三四个文件都删除了。去掉echo的话。- -

TOP

返回列表