返回列表 发帖

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

本帖最后由 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有太多东西了。

我用论坛里的代码:
@echo off
::演示:删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例调用了临时VBS代码进行日期计算,并统一设置系统日期格式,处理完毕
::之后再把日期格式恢复成原来的状态。摆脱了对reg命令(XP系统自带)的依赖。
rem 指定待删除文件的存放路径
set SrcDir=C:\Test\BatHome
rem 指定天数
set DaysAgo=1
>"%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"
)
>"%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"
>"%temp%\DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%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 /r "%SrcDir%" %%a in (*.*) do (
    if "%%~ta" leq "%DstDate%" (
        if exist "%%a" (
            echo del /f /q "%%a"
        )
    )
)
>"%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"
pauseCOPY
27楼结帖子

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

TOP

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

TOP

回复 3# BAT-VBS

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

TOP

回复 4# lky216


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

TOP

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

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

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
@echo off
setlocal enabledelayedexpansion
set "fd=20130101"
for /d %%a in ("D:\user\*") do (
    for /f "tokens=*" %%i in ("%%a\log") do (
        set "d=%%~di"
        set "p=%%~pi"
    )
    wmic datafile where "drive='!d!' and path='!p:\=\\!' and FileName like 'ex%%' and extension='log' and LastModified<'%fd%'" call delete
)COPY

TOP

回复 14# BAT-VBS


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

TOP

返回列表