Board logo

标题: [文件操作] 求删除某个路径下包含指定日期之前的所有文件夹批处理脚本 [打印本页]

作者: tianshiguodong    时间: 2011-12-22 15:40     标题: 求删除某个路径下包含指定日期之前的所有文件夹批处理脚本

我的路径为F:\201221test\smppbillstore
其下的文件夹格式类似于20111223             --------------8位日期组成的文件夹名,每个
要求删除n天以前的文件夹及其包含的文件
作者: tianshiguodong    时间: 2011-12-22 15:47

本帖最后由 tianshiguodong 于 2011-12-22 17:21 编辑

网上找的如下,试了下不能删除,不知为何?
@echo off                                                                                                                              
::演示:删除指定路径下指定天数之前(以文件夹名中包含的日期字符串为准)的文件夹。                                                        
::如果演示结果无误,把rd前面的echo去掉,即可实现真正删除。                                                                              
::本例假设文件夹名中包含的日期字符串(比如:Archive-2009-12-25)                                                                        
                                                                                                                                       
rem 指定待删除文件夹的存放路径                                                                                                         
set SrcDir=F:/201221test/smppbillstore                                                                                                                     
rem 指定天数                                                                                                                           
set DaysAgo=1                                                                                                                           
                                                                                                                                       
>"%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%                                                                                
                                                                                                                                       
setlocal enabledelayedexpansion                                                                                                         
for /d  %%a in ("%SrcDir%/*") do (                                                                                                   
  if "%%~ta" leq "%DstDate%" (                                                                                                         
    set "FolderDate=%%~na"                                                                                                              
    set "FolderDate=!FolderDate:~8,10!"                                                                                                
    if "!FolderDate!" leq "%DstDate%" (
        cd %SrcDir%                                                                                                
        if exist "%%a/" (                                                                                                               
            echo rd /s /q "%%a"                                                                                                         
        )                                                                                                                              
    )                                                                                                                                   
  )                                                                                                                                    
)                                                                                                                                       
endlocal                                                                                                                                
pause

作者: tianshiguodong    时间: 2011-12-22 22:39

由于本人没做过开发,对于批处理脚本有部分看不大懂,希望各位帮帮忙,怎么这么多人看贴,却没人回贴,自己先顶一下,是不是太简单了呀?
作者: awk    时间: 2011-12-22 23:44

回复 2# tianshiguodong


有什么报错信息吗?
作者: lovedjsn    时间: 2011-12-23 00:54

试写了一下发现偶思路有问题~~~
作者: awk    时间: 2011-12-23 01:17

回复 5# lovedjsn


你不会是直接用日期去做减法吧?哈哈
作者: lovedjsn    时间: 2011-12-23 01:49

  1. @echo off
  2. set SrcDir=F:\201221test\smppbillstore
  3. for /f "tokens=1,2,3 delims=- " %%i in ("%date%") do set DstDate=%%i%%j%%k
  4. for /f  %%a in ('"dir /b %SrcDir%\"') do (
  5.   if "%%~na" leq "%DstDate%" (
  6. set "FolderDate=%%~na"
  7. set "FolderDate=%FolderDate:~0,7%"
  8. if "%FolderDate%" leq "%DstDate%" (
  9. cd %SrcDir%
  10. if exist %%a (
  11. echo rd /s /q "%%a"))))
  12. pause
复制代码
改了一下上面的代码~~~~蛋疼了我就是用提取日期删除非今日文件  就是
set "FolderDate=%FolderDate:~0,7%"
if "%FolderDate%" leq "%DstDate%"
这二个不知道为什么读不到%%A值蛋疼了~~不然就可以了~~~
作者: tianshiguodong    时间: 2011-12-23 08:53

回复 4# awk


    没有报错,就是我测试了一下,在对应的文件路径建立类似20111101       20111225     19491001这样的3个文件夹测试了一下,发现没有删除任何文件夹,还请给帮忙看看,这个批处理脚本后面部分那里错了?
作者: tianshiguodong    时间: 2011-12-23 08:59

回复 6# awk


    是用日期做减的然后放入到VBS中,是因为要判断文件夹中包含的日期为n天前的才删除该文件夹和其中的文件
作者: lovedjsn    时间: 2011-12-24 21:32

回复 6# awk


    我是用日期做对比~~~嘿嘿~~~
作者: awk    时间: 2011-12-25 11:23

回复 8# tianshiguodong


他这个代码是假设文件名叫做:Archive-2009-12-25
你需要修改字符串截取那一部分




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2