中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]对以时间命名的文件进行选择删除和分类
« [1] [2] [3] »
作者:
标题: [求助]对以时间命名的文件进行选择删除和分类 上一主题 | 下一主题
easonL
初级用户

E生迅徒


积分 118
发帖 56
注册 2008-5-22
来自 南京
状态 离线
『楼 主』:  [求助]对以时间命名的文件进行选择删除和分类

现在需要对log文件进行处理,文件名的命名规则如下:

[YYYYMMDDhh24miss].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 ]

2008-5-23 10:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

假设现在已经对5个月前的log分类了,下个月处理的时候是否需要在判断分类文件夹里面的文件是否超过6个月呢?



2008-5-23 11:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
easonL
初级用户

E生迅徒


积分 118
发帖 56
注册 2008-5-22
来自 南京
状态 离线
『第 3 楼』:  

需要的,我的想法是:
下个月执行批处理的话,首先根据文件名来判断下,如果是六个月前的文件夹,就直接删除整个文件夹。
例如:现在2008年5月,那么200712这个文件夹我就直接删除好了

2008-5-23 11:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 4 楼』:  

放在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 ]



致精致简!
2008-5-23 13:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
easonL
初级用户

E生迅徒


积分 118
发帖 56
注册 2008-5-22
来自 南京
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by 26933062 at 2008-5-23 01:34 PM:
放在D:\tabiplaza\yado\debug文件夹运行,
未测试。。。
:[code]
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:-\. " %%a in ("%date%") d ...

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

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

呵呵,觉得自己真的很菜,不过没办法,学习总是这样一个过程,多多赐教,不胜感激!

2008-5-23 14:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 6 楼』:  

一闪就没有了,是代码有错误,不好意识,粗心大意将%yy%写成了%yy%%
现以改正,再试试。。



致精致简!
2008-5-23 14:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
easonL
初级用户

E生迅徒


积分 118
发帖 56
注册 2008-5-22
来自 南京
状态 离线
『第 7 楼』:  

跑到for /f "delims=" %%a in ('dir/b/ad') do if %%a leq %yy%% rd/q/s "%%a"
这一句的时候出错:
The syntax of the command is incorrect.

原因正在调查中

2008-5-23 14:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 8 楼』:  

都说了这一句有错,你重新复制4楼代码再试试。。。。



致精致简!
2008-5-23 14:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
easonL
初级用户

E生迅徒


积分 118
发帖 56
注册 2008-5-22
来自 南京
状态 离线
『第 9 楼』:  

@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还有错,呵呵,费神再看看,谢谢

2008-5-23 14:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 10 楼』:  

汗!果然,
以修改并测试成功。。。



致精致简!
2008-5-23 14:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
easonL
初级用户

E生迅徒


积分 118
发帖 56
注册 2008-5-22
来自 南京
状态 离线
『第 11 楼』:  

呵呵,是的!现在已经能够分类了,感谢!

老大,但是删除超过时间的文件的功能没有实现,呵呵

2008-5-23 14:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 12 楼』:  

我测试可以啊!
if !str! leq %yy% (del/q "%%a")
这句就是删除文件的啊?



致精致简!
2008-5-23 14:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
easonL
初级用户

E生迅徒


积分 118
发帖 56
注册 2008-5-22
来自 南京
状态 离线
『第 13 楼』:  

啊?不是吧,我测试的时候,总是建立对应的文件夹,然后把文件放进去(包括六个月前的)。
我觉得可能是目录结构的差异?

我这边的目录结构是:
D:\tabiplaza\yado\debug\底下放文件夹、文件
是这样吗?

2008-5-23 14:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 14 楼』:  

我在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




致精致简!
2008-5-23 14:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
easonL
初级用户

E生迅徒


积分 118
发帖 56
注册 2008-5-22
来自 南京
状态 离线
『第 15 楼』:  

晕倒,果然是目录结构不一样,呵呵,怪我看代码,不能很好理解啊,菜鸟菜鸟啊

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

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

2008-5-23 14:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: