Board logo

标题: [文件操作] [已解决]批处理如何查找出指定目录下(含多层子目录)文件名相同的文件? [打印本页]

作者: pdanniel66    时间: 2010-4-24 15:18     标题: [已解决]批处理如何查找出指定目录下(含多层子目录)文件名相同的文件?

本帖最后由 pcl_test 于 2016-11-9 21:26 编辑

请教批处理如何搜寻目录下(含多层子目录)文件名重复之信息
(
包含完整路径、文件名、档案产生日期、档案大小等) ?


[ 本帖最后由 pdanniel66 于 2010-4-27 06:30 编辑 ]
作者: pdanniel66    时间: 2010-4-25 06:09     标题: 经过搜索后,并无这类帖子

经过搜索后,并无这类帖子!
作者: sgaizxt001    时间: 2010-4-25 06:28

你的意思是搜索目录(包含子目录)里的文件,如果有文件名重复的就显示他们的完整路劲,文件名,日期,大小?如果没重复的就不显示吗?
作者: sgaizxt001    时间: 2010-4-25 07:17

删除,代码后面。避免引起误会

[ 本帖最后由 sgaizxt001 于 2010-4-25 22:39 编辑 ]
作者: pdanniel66    时间: 2010-4-25 20:05

(1) 谢谢提供方向,但以上batch只可以列出1组同文件名之信息,2个以上同檔名时,则无法列出,因为是要在 File server使用,预计会有上百或上千个同檔名之情况发生。

(2) 不可以限制扩展名 ==>  dir /b /a-h /s e:\新建活页夹\*.*
    檔名可能是*.ppt,*,doc,*.jpg…. etc

(3) 可否再修正以上 batch , Thanks!
作者: sgaizxt001    时间: 2010-4-25 20:22

好象我浪费论坛资源了,不过真是无心的,斑竹原谅
作者: sgaizxt001    时间: 2010-4-25 21:19

我晕还是有BUG,b.txt多显示了一遍
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-h /s e:\新建文件夹\*.txt') do (
  4.   for /f "delims=" %%i in ("%%~nxi") do (
  5.      if not defined %%i (
  6.          set %%i=A_     ) else (
  7.                    set str=%%~nxi
  8.      for /r "e:\新建文件夹\" %%i in (!str!) do (
  9.         if exist %%~fi  echo. %%i#%%~fi#%%~ni#%%~ti#%%~zi >>tmp_.txt
  10.                                        )
  11.                                )
  12.                      )
  13.                                              )
  14. pause
  15. for /f "tokens=1,2* delims=#" %%i in (tmp_.txt) do (
  16.     if not defined %%j set %%j=A & echo %%i  %%j  %%k>>结果.txt
  17.                                       )
  18. del tmp_.txt
复制代码
你再用这个看看能不能用

[ 本帖最后由 sgaizxt001 于 2010-4-26 07:41 编辑 ]
作者: pdanniel66    时间: 2010-4-25 22:12

(1) 我在第9行增加了%%~nxi ,会产生 temp_.txt,但不会产生 结果.txt  , why ?
if exist %%~fi  echo. %%~nxi %%~fi %%~ni        %%~ti        %%~zi >>tmp_.txt

(2) 把echo. %%~fi %%~ni %%~ti %%~zi这里的空格用tab键替换,似乎无法排版
作者: sgaizxt001    时间: 2010-4-25 22:32

1.这里%%~nxi可以直接用%%i代替了,
if exist %%~fi  echo. %%~fi %%~ni        %%~ti        %%~zi   %%i>>tmp_.txt
无法产生的是因为我是以路径来作为变量进行最后一个循环的,所以无法产生,你把%%i写在%%~fi后面就可以,一个文件夹下不可能有两个名字相同的文件,但是我前面的代码输出里会有重复显示,所以以完整路径来判断有没有重复的行我认为可行
2.排版的话好象有点问题,如果路径多一个文件夹,后面空格就仍然是那么多个。你看看练习题里就有一个排版的,看看可不可以有点启发

[ 本帖最后由 sgaizxt001 于 2010-4-25 22:37 编辑 ]
作者: pdanniel66    时间: 2010-4-26 06:49

抱歉!我没说清楚,我临时想在前面加文件名(不含路径),该如何改?或者后面檔名加上扩展名

1.txt  D:\scripts\TEST\00_\20100425_list_duplicate_files\1.txt 1        2010/04/25 19:51        0  
1.doc  D:\scripts\TEST\00_\20100425_list_duplicate_files\Test\test2\1.doc 1        2010/04/25 21:52        10752

[ 本帖最后由 pdanniel66 于 2010-4-26 06:54 编辑 ]
作者: sgaizxt001    时间: 2010-4-26 07:42

你再看看7楼的代码可以不。
作者: pdanniel66    时间: 2010-4-26 20:43

看样子不行 , 結果如下:

D:\scripts\TEST\00_\20100425_list_duplicate_files\1.txt  D:\scripts\TEST\00_\20100425_list_duplicate_files\1.txt  1#2010/04/25 19:51#0
作者: sgaizxt001    时间: 2010-4-26 20:55

这样的话,问题还是不严重。对临时文件只输入完整路径,然后去掉相同的行,在最后的输出里在输出你想要的东西就可以了
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-h /s e:\新建文件夹\*.txt') do (
  4.   for /f "delims=" %%i in ("%%~nxi") do (
  5.      if not defined %%i (
  6.          set %%i=A_     ) else (
  7.                    set str=%%~nxi
  8.      for /r "e:\新建文件夹\" %%i in (!str!) do (
  9.         if exist %%~fi  echo. %%~fi>>tmp_.txt
  10.                                        )
  11.                                )
  12.                      )
  13.                                              )
  14. pause
  15. for /f "delims=" %%i in (tmp_.txt) do (
  16.     if not defined %%i set %%i=A & echo %%~nxi %%~fi %%~ni %%~ti %%~zi>>结果.txt
  17.                                       )
  18. del tmp_.txt
复制代码

作者: pdanniel66    时间: 2010-4-26 20:58

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-h /s D:\scripts\TEST\00_\20100425_list_duplicate_files\*.txt *.doc') do (
  for /f "delims=" %%i in ("%%~nxi") do (
     if not defined %%i (
         set %%i=A_     ) else (
                   set str=%%~nxi
     for /r "D:\scripts\TEST\00_\20100425_list_duplicate_files\" %%i in (!str!) do (
        if exist %%~fi  echo.         %%~nxi %%~fi %%~ti        %%~zi >>tmp_.txt
                                       )
                               )
                     )
                                             )
pause
for /f "tokens=1* delims= " %%i in (tmp_.txt) do (
    if not defined %%i set %%i=A & echo %%i  %%j >>结果.txt
                                      )
del tmp_.txt
pause

output as below.
          1.txt D:\scripts\TEST\00_\20100425_list_duplicate_files\1.txt 2010/04/25 19:51        0  
but show error as below.

请按任意键继续 . . .
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
请按任意键继续 . . .
作者: sgaizxt001    时间: 2010-4-26 20:59

我这里没有办法测试,因为我是初学者,写的代码不能一次成功,需要测试修改才能用,而且不具有通用性。你及时给提出问题,我好修改,不过浪费了你的时间真不好意思
作者: GNU    时间: 2010-4-26 20:59     标题: 回复 14楼 的帖子

正确的调试方法应该把@echo off去掉,你提供的一大堆信息基本没啥用。
作者: pdanniel66    时间: 2010-4-26 21:09

您是少尉,我只是三级士官!
作者: sgaizxt001    时间: 2010-4-26 21:13

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-h /s E:\vod\综艺一\*.txt') do (
  4.   for /f "delims=" %%i in ("%%~nxi") do (
  5.      if not defined %%i (
  6.          set %%i=A_     ) else (
  7.                    set str=%%~nxi
  8.      for /r "E:\vod\综艺一\" %%i in (!str!) do (
  9.         if exist %%~fi  echo.%%~fi %%~ti %%~zi >>tmp_.txt
  10.                                        )
  11.                                )
  12.                      )
  13.                                              )
  14. pause
  15. for /f "tokens=1,2,3,4 delims= " %%i in (tmp_.txt) do (
  16.     if not defined %%i set %%i=A & echo. %%~nxi %%i %%j %%k %%l >>结果.txt
  17.                                       )
  18. endlocal
  19. del tmp_.txt
复制代码
这是我运行出来的结果:
NOTES.txt E:\vod\综艺一\2009-2010赛季NBA赛事\NOTES.txt 2009-06-27 04:06 275
NOTES.txt E:\vod\综艺一\2009NBA全明星赛\NOTES.txt 2009-04-10 04:12 559
NOTES.txt E:\vod\综艺一\2009亚洲音乐节\NOTES.txt 2009-11-05 21:01 276
NOTES.txt E:\vod\综艺一\2009集善嘉年华晚会\NOTES.txt 2009-11-05 21:01 276
notes.txt E:\vod\综艺一\S.H.E-SHERO\notes.txt 2010-03-30 13:51 2787
NOTES.txt E:\vod\综艺一\布兰妮_禁区之旅_演唱会\NOTES.txt 2008-10-07 17:47 322
NOTES.txt E:\vod\综艺一\湖南卫视2009-2010跨年演唱会\NOTES.txt 2009-12-18 22:43 265
NOTES.txt E:\vod\综艺一\第12届电影金凤凰奖颁奖典礼晚会\NOTES.txt 2009-09-28 09:16 305
NOTES.txt E:\vod\综艺一\美女厨房II\NOTES.txt 2009-04-29 05:11 806
NOTES.txt E:\vod\综艺一\背后的故事20100314期(刘青云)\NOTES.txt 2010-03-18 05:00 975
notes.txt E:\vod\综艺一\超级偶像20100327\notes.txt 2010-03-30 13:08 403
NOTES.txt E:\vod\综艺一\超级星光大道20100326\NOTES.txt 2009-04-03 11:57 709
NOTES.txt E:\vod\综艺一\迈克尔杰克逊布加勒斯特92演唱会\NOTES.txt 2010-01-14 05:20 2924
NOTES.txt E:\vod\综艺一\迈克尔杰克逊:就是这样\NOTES.txt 2010-01-14 05:22 1145
NOTES.txt E:\vod\综艺一\郭富城2008舞林正传演唱会\NOTES.txt 2009-03-06 01:00 1103
notes.txt E:\vod\综艺一\钟欣桐-人人弹起\notes.txt 2010-03-30 13:52 1435
notes.txt E:\vod\综艺一\陈慧琳-微光\notes.txt 2010-03-30 13:58 1149
NOTES.txt E:\vod\综艺一\鲁豫有约\NOTES.txt 2009-11-05 21:01 276
电影资料(样板).txt E:\vod\综艺一\2009魅力·中国鸟巢夏季音乐会\电影资料(样板).txt 2010-04-23 17:21 1556
电影资料(样板).txt E:\vod\综艺一\2010_Wrestlemania_26\电影资料(样板).txt 2010-04-10 12:30 498
周杰伦 E:\vod\综艺一\周杰伦 龙战骑士\电影资料(样板).txt 2009-03-06 01:01
电影资料(样板).txt E:\vod\综艺一\天天向上20100416期\电影资料(样板).txt 2010-04-05 14:12 649
电影资料(样板).txt E:\vod\综艺一\学友光年07香港站\电影资料(样板).txt 2009-02-19 07:42 2539
电影资料(样板).txt E:\vod\综艺一\小虎队1995年虎啸龙腾狂飙演唱会\电影资料(样板).txt 2010-04-12 11:33 1293
电影资料(样板).txt E:\vod\综艺一\情书第1季12代全集\电影资料(样板).txt 2010-04-14 11:00 1682
电影资料(样板).txt E:\vod\综艺一\我猜20100424\电影资料(样板).txt 2009-12-18 22:43 265
电影资料(样板).txt E:\vod\综艺一\超级游戏奖门人大爆发\电影资料(样板).txt 2010-04-21 14:23 1272
是这样的格式不?
作者: sgaizxt001    时间: 2010-4-26 21:16

还需要排版不?我上面的输出是按照文件夹的排序来顺序输出的,有点乱哦。
sort排序,但是他不分大小写!

[ 本帖最后由 sgaizxt001 于 2010-4-26 21:21 编辑 ]
作者: pdanniel66    时间: 2010-4-26 21:21

非常谢谢,得到我要的结果了!
若可以排序,就太好了!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2