中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [请教]怎么获取各个文件夹下都有的最新的同名文件?
作者:
标题: [请教]怎么获取各个文件夹下都有的最新的同名文件? 上一主题 | 下一主题
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『楼 主』:  [请教]怎么获取各个文件夹下都有的最新的同名文件?

现在有个这样的问题向各位求教,恳请帮忙。

在一个网络目录下,假设为\\server\ourmyfile\
它下面有很多的子文件夹,这些子文件夹视不同的情况有很多层。
但许多子文件夹下都有一个我需要的文件,比如goal.htm,它们名称相同,但最后的修改日期都是不同的。另外每个文件夹的日期对应goal.htm的日期(即文件夹新,它里层的goal.htm就新)。

我现在想把它们中最新的goal.htm(只包含其路径信息)搜出来,即让全部的goal.htm按日期由新到旧排列,该怎么操作呢?

本人小菜一个,我自己想到的方法仅是:
set path1=\\server\ourmyfile
dir /s /b /o-d %path1%\goal.htm  >>a.txt

但是/o-d只在每个文件夹内部有效,而提取出的goal.htm还是会按照dir出来的每个goal.htm的根文件夹的顺序来排序,这样的话关键就在于文件夹的排列顺序了。
然而我发现dir网络路径时,其排序方式似乎和在本机的不太一样,比较乱,我很不清楚它的排列规则。要是能让dir先把文件夹按从新到旧先排列好,然而再递进其内部,这样就能把最新的goal.htm列在最前头了。
怎么实现呢?先行谢过啊!

[ Last edited by Billunique on 2007-9-22 at 04:07 PM ]

2007-3-22 05:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『第 2 楼』:  

补充:
其实可以不用管我说的
文件夹与所需文件goal.htm的对应关系。
只要能把这些文件夹中最新的goal.htm找出来就行,目的只是这个。

向你请教,谢谢!

2007-3-22 06:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『第 3 楼』:  

咋没人理会啊,伤心:(~

求助啊,版主们!老大们!namejm、willsort、无奈何、如是大师……!

2007-3-22 10:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

  命令行执行下面的:
(for /f "delims=" %a in ('dir /s/b/a-d %path1%\goal.html') do @echo/%~ta %~a)|sort /r|more >a.txt


   此帖被 +2 点积分    点击查看详情   
评分人:【 Billunique 分数: +2  时间:2007-3-23 05:02


2007-3-22 12:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『第 5 楼』:  

多谢lxmxn大侠的热心相助!你已经帮我解决了我的问题。但在下还有一些疑惑,想再向你请教一下。

1 在此例中,因我只搜文件,加了 /a-d 是不是比不加速度要快?

2 echo / 与 直接 echo的作用有何区别呢?

3 我查了下,%~a是删除前后引号,%~a比直接%a有什么好处呢,你是出于什么考虑的?

4 其实我想要的只是最新文件的全路径,以为下一步拷贝它作准备。
因为记录在a.txt里的格式是2007-03-05 14:39 \\server\ourfile\……
我在你的基础上

for /f "tokens=3 delims= " %%b in (a.txt) do (copy %%b && goto endfor)
:endfor
(无内容)

实现了把第一个文件拷贝出来。
请问能否让它在a.txt里的时候就只显示路径,却按日期从新到旧排列呢?

多谢大侠!^_^

2007-3-23 00:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  


Re Billunique:

1、加了/a-d 参数可以筛选文件,忽略文件夹,可以提高速度;

2、echo/和echo 的作用差不多;有细微的区别,echo/在命令执行可以输出一空行,而单独的echo 就会显示当前命令提示符的echo 设置状态,是打开还是关闭了;

3、%~a 是个人使用习惯,在这里没有什么作用;

4、在命令行执行:
for /f "tokens=1-3*" %x in ('^(for /f "delims=" %a in ^('dir /s/b/a-d %path1%\*.html'^) do @echo/%~ta %~a^)^|sort /r') do @echo %z >>a.txt


   此帖被 +2 点积分    点击查看详情   
评分人:【 Billunique 分数: +2  时间:2007-3-23 05:02


2007-3-23 01:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『第 7 楼』:  

哈真好!真是厉害。不过还要请教啊:)

1 我把tokens=1-3*改成tokens=1,2*试了试,发现结果虽然一样,但后者(b.txt)生成的列表文件却比前者(a.txt)要大一些。我看了下,生成文件有30行,而b.txt正好比a.txt大了30个字节。
   我想了想,应该跟"1,2*"比"1-3*"多取一个空格有关(第2个和第3个token间有一个空格)但a.txt与b.txt在每行的前头都是一样的,唯一区别就是b.txt比a.txt在文本结束的地方多了一个空格。
   为什么这样呢,为什么这个空格自动被转到了文本后头呢?

   另外如果那个路径下有的文件夹名字中包含空格,用"1-3*"就取不全了,呵呵是吗?

2 为什么你要用前导符呢?我试了一下,去掉它们是不行的,它们在这起什么作用?

3 for是否有嵌套的限制?我学你的样子,呵就不行了,问题在哪呢?

for /f %%i in ('for /f "tokens=1,2*" %%x in ^('^(for /f "delims=" %%a in ^('dir /s/b/a-d %path1%\%1.htm'^) do @echo/%%~ta %%~a^)^|sort /r'^) do @echo %%z') do (@copy %%i && goto endf)

:endf

希望你不会不胜我烦啊:)

2007-3-23 07:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  


Re Billunique:

1、兄的理解是正确的,如果有空格,就可能取不到完整的路径了;至于为什么后面会多出一个空格出来,想了半天还是没有想出来,兄可以自己研究一下,特别是tokens里面有*的时候,注意区别;

2、加了前导符是为了转义和与外置的for相区别开;

3、对于多个for的嵌套还没有试过,试了变天也没有成功,不知道是for的原因还是我们的命令格式有误;兄可以考虑转义和扩展,看问题能解决么。


2007-3-23 09:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Billunique
中级用户

菜鸟总动员


积分 259
发帖 112
注册 2006-8-28
状态 离线
『第 9 楼』:  

再傻问一句:
为什么要转义和同外置的for相区分呢?不加上的话命令会失效,那失效的原因又是什么呢?

[ Last edited by Billunique on 2007-3-23 at 11:37 AM ]

2007-3-23 11:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: