中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-22 16:05
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]对以时间命名的文件进行选择删除和分类 查看 2,663 回复 41
楼 主 [求助]对以时间命名的文件进行选择删除和分类 发表于 2008-05-23 10:49 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
现在需要对log文件进行处理,文件名的命名规则如下:

.log
例)
D:\tabiplaza\yado\debug\20080522000200.log

批处理要求:
1、六个月前的文件,删除

2、五个月前的文件,进行分类,每个文件按照月份放入对应的文件夹(以月份命名)。
例如:D:\tabiplaza\yado\debug\20080522000200.log->文件夹:200805

由于初次接触批处理,基本上属于准备入门状态,请求版主以及各位大虾帮忙出出注意!不胜感激!
(另外,搜索没找到什么结果,也有可能搜索的关键字不对,希望指教!)

[ Last edited by easonL on 2008-5-26 at 03:19 PM ]
2 发表于 2008-05-23 11:20 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
假设现在已经对5个月前的log分类了,下个月处理的时候是否需要在判断分类文件夹里面的文件是否超过6个月呢?
3 发表于 2008-05-23 11:25 ·  中国 江苏 南京 电信
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
需要的,我的想法是:
下个月执行批处理的话,首先根据文件名来判断下,如果是六个月前的文件夹,就直接删除整个文件夹。
例如:现在2008年5月,那么200712这个文件夹我就直接删除好了
4 发表于 2008-05-23 13:34 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
放在D:\tabiplaza\yado\debug文件夹运行,
未测试。。。

@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:-\/. " %%a in ("%date%") do (
set /a yy=%%a,mm=100%%b%%100-5
)
if %mm% leq 0 set /a nn=1
set /a m=(12+mm)%%12,y=yy-nn
if %m% equ 0 set m=12
set m=0%m%
set yy=%y%%m:~-2%
for /f "delims=" %%a in ('dir/b/ad') do if %%a leq %yy% rd/q/s "%%a"
for /f "delims=" %%a in ('dir/b/a-d *.log') do (
set "str=%%~nxa"
set "str=!str:~0,6!"
if !str! leq %yy% (del/q "%%a") else (
if not exist !str!\ md !str!
move "%%a" "!str!"
)
)
pause


[ Last edited by 26933062 on 2008-5-23 at 03:38 PM ]
致精致简!
5 发表于 2008-05-23 14:01 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
Originally posted by 26933062 at 2008-5-23 01:34 PM:
放在D:\tabiplaza\yado\debug文件夹运行,
未测试。。。
:

@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:-\. " %%a in ("%date%") d ...



非常感谢,我正在测试,不过遇到一些问题,继续请教

1、我保存在D:\tabiplaza\yado\debug底下,命名未debug.bat
2、想让它输出点提示信息,可是cmd那个黑屏总是一闪就没有了,这是为什么?

呵呵,觉得自己真的很菜,不过没办法,学习总是这样一个过程,多多赐教,不胜感激!
6 发表于 2008-05-23 14:05 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
一闪就没有了,是代码有错误,不好意识,粗心大意将%yy%写成了%yy%%
现以改正,再试试。。
致精致简!
7 发表于 2008-05-23 14:10 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
跑到for /f "delims=" %%a in ('dir/b/ad') do if %%a leq %yy%% rd/q/s "%%a"
这一句的时候出错:
The syntax of the command is incorrect.

原因正在调查中
8 发表于 2008-05-23 14:15 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
都说了这一句有错,你重新复制4楼代码再试试。。。。
致精致简!
9 发表于 2008-05-23 14:17 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:-\. " %%a in ("%date%") do (
set /a yy=%%a,mm=100%%b%%100-5
)
if %mm% leq 0 set /a nn=1
set /a m=(12+mm)%%12,y=yy-nn
if %m% equ 0 set m=12
set m=0%m%
set yy=%y%%m:~-2%
for /f "delims=" %%a in ('dir/b/ad') do if %%a leq %yy% rd/q/s "%%a"
for /f "delims=" %%a in ('dir/b/a-d *.log') do (
set "str=%%~nxa"
if !str:~0,6! leq %yy% (del/q "%%a") else (
if not exist !str:~0,6!\ md !str:~0,6!
move "%%a" "!str:~0,6!"
)
)
pause

----------------------------------------------------------------------------------------
将后面两个运算变量%yy%后,运行的错误是:
6! was unexpected at this time.
好像是最后那句if还有错,呵呵,费神再看看,谢谢
10 发表于 2008-05-23 14:28 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
汗!果然,
以修改并测试成功。。。
致精致简!
11 发表于 2008-05-23 14:31 ·  中国 江苏 南京 电信
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
呵呵,是的!现在已经能够分类了,感谢!

老大,但是删除超过时间的文件的功能没有实现,呵呵
12 发表于 2008-05-23 14:34 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
我测试可以啊!
if !str! leq %yy% (del/q "%%a")
这句就是删除文件的啊?
致精致简!
13 发表于 2008-05-23 14:42 ·  中国 江苏 南京 电信
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
啊?不是吧,我测试的时候,总是建立对应的文件夹,然后把文件放进去(包括六个月前的)。
我觉得可能是目录结构的差异?

我这边的目录结构是:
D:\tabiplaza\yado\debug\底下放文件夹、文件
是这样吗?
14 发表于 2008-05-23 14:47 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
我在abcd文件夹里创建了以下这些log文件
然后运行4楼的代码。
abcd文件夹里只剩下200801-----2008-05文件夹,里面是相应的文件。
已经没有2007开头的文件了,难道不对?
:

200701dfjg.log
200702dfgs.log
200703fhhhgh.log
200710sfysh.log
200711sdfhsh.log
200712sfdhsh.log
200801sdfhsghgh.log
200802sdfhgsh.log
200805sfdhstsr.log
200803sfdhs.log
200804sghsgh.log
200701dfjgfg.log
200702dfgssdfg.log
200703fhhhghsdg.log
200710sfyshsfg.log
200711sdfhshsdfg.log
200712sfdhshsfg.log
200801sdfhsghghsfg.log
200802sdfhgshsdg80.log
200805sfdhstsrsdfg678.log
200803sfdhssgj68.log
200804sghsghh6.log
致精致简!
15 发表于 2008-05-23 14:54 ·  中国 江苏 南京 电信
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
晕倒,果然是目录结构不一样,呵呵,怪我看代码,不能很好理解啊,菜鸟菜鸟啊

老大,两个问题:
1、D:\tabiplaza\yado\debug下面放的是bat文件,这个应该对的!
2、你的abcd文件夹的目录路径什么?

哎,要不是急着做出来,我一定等到能完全看懂代码的时候,再向你好好请教!
论坛跳转: