中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 18:09
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]对以时间命名的文件进行选择删除和分类
可打印版本  2,872 / 41
第1楼 easonL 发表于 2008-05-23 10:49
初级用户 发帖 56 积分 118 来自 南京
[求助]对以时间命名的文件进行选择删除和分类
现在需要对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楼 HAT 发表于 2008-05-23 11:20
版主 发帖 5,017 积分 9,023
假设现在已经对5个月前的log分类了,下个月处理的时候是否需要在判断分类文件夹里面的文件是否超过6个月呢?
第3楼 easonL 发表于 2008-05-23 11:25
初级用户 发帖 56 积分 118 来自 南京
需要的,我的想法是:
下个月执行批处理的话,首先根据文件名来判断下,如果是六个月前的文件夹,就直接删除整个文件夹。
例如:现在2008年5月,那么200712这个文件夹我就直接删除好了
第4楼 26933062 发表于 2008-05-23 13:34
银牌会员 发帖 879 积分 2,268
放在D:\tabiplaza\yado\debug文件夹运行,
未测试。。。


[ Last edited by 26933062 on 2008-5-23 at 03:38 PM ]
第5楼 easonL 发表于 2008-05-23 14:01
初级用户 发帖 56 积分 118 来自 南京
Originally posted by 26933062 at 2008-5-23 01:34 PM:
放在D:\tabiplaza\yado\debug文件夹运行,
未测试。。。
:
第6楼 26933062 发表于 2008-05-23 14:05
银牌会员 发帖 879 积分 2,268
一闪就没有了,是代码有错误,不好意识,粗心大意将%yy%写成了%yy%%
现以改正,再试试。。
第7楼 easonL 发表于 2008-05-23 14:10
初级用户 发帖 56 积分 118 来自 南京
跑到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楼 26933062 发表于 2008-05-23 14:15
银牌会员 发帖 879 积分 2,268
都说了这一句有错,你重新复制4楼代码再试试。。。。
第9楼 easonL 发表于 2008-05-23 14:17
初级用户 发帖 56 积分 118 来自 南京
@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楼 26933062 发表于 2008-05-23 14:28
银牌会员 发帖 879 积分 2,268
汗!果然,
以修改并测试成功。。。
第11楼 easonL 发表于 2008-05-23 14:31
初级用户 发帖 56 积分 118 来自 南京
呵呵,是的!现在已经能够分类了,感谢!

老大,但是删除超过时间的文件的功能没有实现,呵呵
第12楼 26933062 发表于 2008-05-23 14:34
银牌会员 发帖 879 积分 2,268
我测试可以啊!
if !str! leq %yy% (del/q "%%a")
这句就是删除文件的啊?
第13楼 easonL 发表于 2008-05-23 14:42
初级用户 发帖 56 积分 118 来自 南京
啊?不是吧,我测试的时候,总是建立对应的文件夹,然后把文件放进去(包括六个月前的)。
我觉得可能是目录结构的差异?

我这边的目录结构是:
D:\tabiplaza\yado\debug\底下放文件夹、文件
是这样吗?
第14楼 26933062 发表于 2008-05-23 14:47
银牌会员 发帖 879 积分 2,268
我在abcd文件夹里创建了以下这些log文件
然后运行4楼的代码。
abcd文件夹里只剩下200801-----2008-05文件夹,里面是相应的文件。
已经没有2007开头的文件了,难道不对?
:
第15楼 easonL 发表于 2008-05-23 14:54
初级用户 发帖 56 积分 118 来自 南京
晕倒,果然是目录结构不一样,呵呵,怪我看代码,不能很好理解啊,菜鸟菜鸟啊

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

哎,要不是急着做出来,我一定等到能完全看懂代码的时候,再向你好好请教!
1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023