中国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] »
作者:
标题: [求助]对以时间命名的文件进行选择删除和分类 上一主题 | 下一主题
26933062
银牌会员





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

你如果把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



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

E生迅徒


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

现在我这边的情况是这样:
D:\tabiplaza\yado\debug下放置的是log文件和bat文件
我并没有建立abcd文件夹

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


另外,我看到代码里面“'dir/b/ad'‘,这句有没有关系?

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





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

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的文件都移动到了相应的文件夹内。
难道不是这样?



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

E生迅徒


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

1、D:\tabiplaza\yado\debug文件夹里面除了log文件,没有其他文件了(当然啦,还有就是bat文件)
2、经过bat运行一把之后,D:\tabiplaza\yado\debug底下的文件夹有:
200703
200709
200801
200802
200803
200808

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





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

怎么会这样呢?
你运行以下代码,把结果贴来看看。。。
:
@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




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

E生迅徒


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

不好意思,刚才没有没有看到你回复,我就回复了上面的内容

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

我突然想起来有一个情况,想跟你说下,我的系统是英文系统,这个会不会影响?
我怕系统的时间格式有差异,影响结果?

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

E生迅徒


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



  Quote:
Originally posted by 26933062 at 2008-5-23 03:29 PM:
怎么会这样呢?
你运行以下代码,把结果贴来看看。。。
:[code]
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:-\. " %%a in ("%date ...

运行结果是:
D:\tabiplaza\yado\debug>test2
"1607"
Press any key to continue . . .

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





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

啊?????
有没有搞错啊??
确实是时间格式导致的。
你再运行
echo %date%
结果是什么?

[ Last edited by 26933062 on 2008-5-23 at 03:35 PM ]



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

E生迅徒


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



  Quote:
Originally posted by 26933062 at 2008-5-23 03:33 PM:
啊?????
有没有搞错啊??
你再运行
echo %date%
结果是什么?

echo出来的结果:
2008/05/23

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





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

for /f "tokens=1,2 delims=:-\. " %%a in ("%date%") do (
把这句改为
for /f "tokens=1,2 delims=:-/. " %%a in ("%date%") do (
即可
或再复制4楼代码运行



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

E生迅徒


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

哇!!!!!!
太强大了,果然好了!!
呵呵,是什么原因呢?能不能给解析一下?

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





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

delims=:-\.  我之前为确保无误用了:-\.这4种符号来切割%date%为的是把日期分成年月日,却不想你的日期分割符偏偏是 /
唉!。。。 百密一疏。。。
其实只要delims=/ 就可以了的。

[ Last edited by 26933062 on 2008-5-23 at 03:52 PM ]



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

E生迅徒


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

首先表示感谢!!非常谢谢你的帮忙!
呵呵,本来写代码就是需要经过大量debug的,纯属正常!只是不是自己的环境下调试,这个错误被放大了而已!

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

2、学习P的准备入门阶段,据我自己的学习经验,必须大量练习外,您还有没有什么特别科学的经验,可不可以指教一下,谢谢

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





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

经验就是:大量练习,及多看别人的帖
要在其它位置运行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




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

E生迅徒


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

恩,好的,谢谢,继续学习中!碰到问题在向您请教!
不胜感激!

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


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



论坛跳转: