![]() |
中国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: |
|
| 第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 |