中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-05 03:47
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理获取当前日期,删除指定文件夹 查看 1,957 回复 6
楼 主 批处理获取当前日期,删除指定文件夹 发表于 2009-01-16 18:42 ·  中国 广东 惠州 电信
新手上路
积分 9
发帖 5
注册 2008-12-17 12:24
17年会员
UID 134144
性别 男
状态 离线
各位大大好,我是一个刚入门的小菜。想请教一个关于获取当前日期,然后删除指定文件夹里面的文件的批处理或者各位大大帮我写一个。
问题是这样的:
我们在使用一款监控软件,这款软件每天会在指定的文件夹里生成一个由当天日期命名的文件夹(假如今天是16号,则会生成一个名位16的文件夹)存放当天的采集视频,由于我的硬盘只有120G,每次采集个两三天就得手动删除一下。很烦琐,所以我想写一个批处理,获取当前日期,删除除了当前日期之前的所有文件夹(由数字00-31命名的文件夹),我的批处理能力还只是入门不到。所以想请各位大大能帮忙写一个。。。
在下先谢过了。





———————————————————————
转移自 DOS学习入门 & 精彩文章 (教学室)
今后发帖请尽量发到对应的版块。
——管理员
———————————————————————
2 发表于 2009-01-17 19:35 ·  中国 广东 惠州 电信
新手上路
积分 9
发帖 5
注册 2008-12-17 12:24
17年会员
UID 134144
性别 男
状态 离线
贴子发了一天了,那么多人看,就没有一个人肯帮帮忙的吗???
3 发表于 2009-06-21 12:30 ·  中国 广东 惠州 电信
初级用户
★★
积分 65
发帖 61
注册 2009-06-15 08:51
17年会员
UID 147446
性别 女
状态 离线
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
4 发表于 2009-06-22 03:36 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
@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 ]
5 发表于 2009-06-22 05:45 ·  中国 河南 济源 联通
中级用户
★★
积分 343
发帖 50
注册 2004-02-21 00:00
22年会员
UID 18062
性别 男
状态 离线
多潜水,多看贴子!!!
6 发表于 2009-06-22 08:59 ·  中国 河南 郑州 联通
新手上路
积分 18
发帖 20
注册 2008-10-28 22:45
17年会员
UID 129408
性别 男
状态 离线
你可以用 %date:~5,5% 获取文件夹名字
用if 判断去删除文件夹
7 发表于 2009-06-22 11:58 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
只有当指定的文件夹中只含有子文件夹名都是由数字构成,且都是两位数字的时候,可以使用这个:


@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 ]
论坛跳转: