中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-22 14:33
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]对以时间命名的文件进行选择删除和分类 查看 2,662 回复 41
16 发表于 2008-05-23 14:59 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
你如果把bat文件放在D:\tabiplaza\yado\debug文件夹里运行的话,那么我的abcd文件夹目录路径就不重要了。
你的D:\tabiplaza\yado\debug文件夹里除了你说的log文件外,还有其它文件吗?
D:\tabiplaza\yado\debug文件夹里,都还有些什么文件夹?
或者你运行下面的代码把a.txt结果贴出来看看
@echo off
for /f "delims=" %%a in ('dir/b/ad') do echo %%a>>a.txt
pause
致精致简!
17 发表于 2008-05-23 15:13 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
现在我这边的情况是这样:
D:\tabiplaza\yado\debug下放置的是log文件和bat文件
我并没有建立abcd文件夹

跑出来的结果是:
D:\tabiplaza\yado\debug底下生成了以年月命名的文件夹,文件夹里面放置的是log文件,这个过程没有删除文件(包括过时的文件和文件夹)


另外,我看到代码里面“'dir/b/ad'‘,这句有没有关系?
18 发表于 2008-05-23 15:22 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
for /f "delims=" %%a in ('dir/b/ad') do if %%a leq %yy% rd/q/s "%%a"
这一句 是判断D:\tabiplaza\yado\debug文件夹里的文件夹若小于6个月就删除(文件夹名都是以年月为名)
你说D:\tabiplaza\yado\debug底下生成了以年月命名的文件夹,这些文件夹难道有200801以前的文件夹吗?
运行bat文件后,D:\tabiplaza\yado\debug文件夹里应该没有log文件了才对,因为小于200801的文件都删除了,大于或等于200801的文件都移动到了相应的文件夹内。
难道不是这样?
致精致简!
19 发表于 2008-05-23 15:26 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
1、D:\tabiplaza\yado\debug文件夹里面除了log文件,没有其他文件了(当然啦,还有就是bat文件)
2、经过bat运行一把之后,D:\tabiplaza\yado\debug底下的文件夹有:
200703
200709
200801
200802
200803
200808
20 发表于 2008-05-23 15:29 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
怎么会这样呢?
你运行以下代码,把结果贴来看看。。。
:

@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%
echo "%yy%"
pause
致精致简!
21 发表于 2008-05-23 15:30 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
不好意思,刚才没有没有看到你回复,我就回复了上面的内容

运行bat文件后,D:\tabiplaza\yado\debug文件夹里应该没有log文件,已经移到了相应的文件夹里面了,但是小于200801的文件夹依然存在!!

我突然想起来有一个情况,想跟你说下,我的系统是英文系统,这个会不会影响?
我怕系统的时间格式有差异,影响结果?
22 发表于 2008-05-23 15:32 ·  中国 江苏 南京 联通
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
Originally posted by 26933062 at 2008-5-23 03:29 PM:
怎么会这样呢?
你运行以下代码,把结果贴来看看。。。
:

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


运行结果是:
D:\tabiplaza\yado\debug>test2
"1607"
Press any key to continue . . .
23 发表于 2008-05-23 15:33 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
啊?????
有没有搞错啊??
确实是时间格式导致的。
你再运行
echo %date%
结果是什么?

[ Last edited by 26933062 on 2008-5-23 at 03:35 PM ]
致精致简!
24 发表于 2008-05-23 15:35 ·  中国 江苏 南京 电信
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
Originally posted by 26933062 at 2008-5-23 03:33 PM:
啊?????
有没有搞错啊??
你再运行
echo %date%
结果是什么?



echo出来的结果:
2008/05/23
25 发表于 2008-05-23 15:37 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
for /f "tokens=1,2 delims=:-\. " %%a in ("%date%") do (
把这句改为
for /f "tokens=1,2 delims=:-/. " %%a in ("%date%") do (
即可
或再复制4楼代码运行
致精致简!
26 发表于 2008-05-23 15:40 ·  中国 江苏 南京 电信
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
哇!!!!!!
太强大了,果然好了!!
呵呵,是什么原因呢?能不能给解析一下?
27 发表于 2008-05-23 15:51 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
delims=:-\. 我之前为确保无误用了:-\.这4种符号来切割%date%为的是把日期分成年月日,却不想你的日期分割符偏偏是 /
唉!。。。 百密一疏。。。
其实只要delims=/ 就可以了的。

[ Last edited by 26933062 on 2008-5-23 at 03:52 PM ]
致精致简!
28 发表于 2008-05-23 16:00 ·  中国 江苏 南京 电信
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
首先表示感谢!!非常谢谢你的帮忙!
呵呵,本来写代码就是需要经过大量debug的,纯属正常!只是不是自己的环境下调试,这个错误被放大了而已!

对P的运行机制不懂,还麻烦您继续答疑一下!
1、我们现在把bat放在D:\tabiplaza\yado\debug下,如果我在环境变量中加入
D:\tabiplaza\yado\debug,这样的话是不是就可以随处运行bat文件了?
可现在问题是我如果想改变bat文件的路径,比如我想放在C:\底下,而D:\tabiplaza\yado\debug底下还是放log文件,该怎么改变?

2、学习P的准备入门阶段,据我自己的学习经验,必须大量练习外,您还有没有什么特别科学的经验,可不可以指教一下,谢谢
29 发表于 2008-05-23 16:10 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
经验就是:大量练习,及多看别人的帖
要在其它位置运行bat,考虑的问题要多一点,以下代码未测试。。。
:

@echo off&setlocal enabledelayedexpansion
set "lj=D:\tabiplaza\yado\debug"
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 "%lj%"') do if %%a leq %yy% rd/q/s "%lj%\%%~nxa"
for /f "delims=" %%a in ('dir/b/a-d "%lj%\*.log"') do (
set "str=%%~nxa"
set "str=!str:~0,6!"
if !str! leq %yy% (del/q "%lj%\%%~nxa") else (
if not exist "%lj%\!str!\" md "%lj%\!str!"
move "%lj%\%%~nxa" "%lj%\!str!"
)
)
pause
致精致简!
30 发表于 2008-05-23 16:13 ·  中国 江苏 南京 电信
初级用户
★★
E生迅徒
积分 118
发帖 56
注册 2008-05-22 16:34
18年会员
UID 119421
性别 男
来自 南京
状态 离线
恩,好的,谢谢,继续学习中!碰到问题在向您请教!
不胜感激!
论坛跳转: