标题: 批处理获取当前日期,删除指定文件夹
[打印本页]
作者: skypn520
时间: 2009-1-16 18:42
标题: 批处理获取当前日期,删除指定文件夹
各位大大好,我是一个刚入门的小菜。想请教一个关于获取当前日期,然后删除指定文件夹里面的文件的批处理或者各位大大帮我写一个。
问题是这样的:
我们在使用一款监控软件,这款软件每天会在指定的文件夹里生成一个由当天日期命名的文件夹(假如今天是16号,则会生成一个名位16的文件夹)存放当天的采集视频,由于我的硬盘只有120G,每次采集个两三天就得手动删除一下。很烦琐,所以我想写一个批处理,获取当前日期,删除除了当前日期之前的所有文件夹(由数字00-31命名的文件夹),我的批处理能力还只是入门不到。所以想请各位大大能帮忙写一个。。。
在下先谢过了。
———————————————————————
转移自 DOS学习入门 & 精彩文章 (教学室)
今后发帖请尽量发到对应的版块。
——管理员
———————————————————————
作者: skypn520
时间: 2009-1-17 19:35
贴子发了一天了,那么多人看,就没有一个人肯帮帮忙的吗???
作者: huangshuirun
时间: 2009-6-21 12:30
rem 指定待删除文件的存放路径
set SrcDir=D:\opsys\model_def
rem 指定待删除文件日期
set DaysAgo=3
forfiles /p %SrcDir% /s /m *.* /d -%DaysAgo% /c "cmd /c del /f /q /a @path"
pause
作者: Hanyeguxing
时间: 2009-6-22 03:36
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
::设置要检查的文件夹路径为变量han,路径最后面不要有\
set han=D:\bak
::请确认日期格式是否如示例2009-06-22 星期一
echo %date%
pause
::判断日期是否小于10
if "%date:~8,2%" LSS "10" (set gu=%date:~9,1%) else set gu=%date:~8,2%
::获取文件夹名
for /l %%i in (1 1 %gu%) do (
set /a ye=%%i-1
set ye=0!ye!
rmdir "!han!\!ye:~-2!" /s /q>nul 2>nul
)
既然按日期生成文件夹名,那么就不会有00这个日期。你说有了,就按有的写吧。。。
这个批处理中有3个注意的问题:
1,因为由for /l得到的数字中,1到9是1位的,10到31是两位,为了得到01-09,10-31,需要将for /l后的数字前面加0,然后截取后两位,即得到01-31。
2,以为在for /l的终止数字中,不能使用0开头的数字,例如for /l %%i in (1 1 09) do (。。。
而直接截取%date%变量,得到的数字可能前面带0,所以必须使用if进行判断,根据不同的情况进行截取。
3,日期变量的截取是根据如示例2009-06-22 星期一的%date%进行截取的
[
Last edited by Hanyeguxing on 2009-6-22 at 11:39 ]
作者: jyssysz
时间: 2009-6-22 05:45
多潜水,多看贴子!!!
作者: wishpopo
时间: 2009-6-22 08:59
你可以用 %date:~5,5% 获取文件夹名字
用if 判断去删除文件夹
作者: Hanyeguxing
时间: 2009-6-22 11:58
只有当指定的文件夹中只含有子文件夹名都是由数字构成,且都是两位数字的时候,可以使用这个:
@echo off&setlocal enabledelayedexpansion
::设置要检查的文件夹路径为变量han,路径最后面不要有\
set han=D:\bak
::请确认日期格式是否如示例2009-06-22 星期一
echo %date%
pause
for /f "delims=" %%i in ('dir "%han%" /b /s /a:d') DO (
set ye=%%i
if "!ye:~-2!" LSS "!date:~8,2!" rmdir "!ye!" /s /q>nul 2>nul
)
[
Last edited by Hanyeguxing on 2009-6-22 at 12:04 ]