[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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


[ 本帖最后由 pdanniel66 于 2010-4-27 06:30 编辑 ]

经过搜索后,并无这类帖子

经过搜索后,并无这类帖子!

TOP

你的意思是搜索目录(包含子目录)里的文件,如果有文件名重复的就显示他们的完整路劲,文件名,日期,大小?如果没重复的就不显示吗?

TOP

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

[ 本帖最后由 sgaizxt001 于 2010-4-25 22:39 编辑 ]

TOP

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

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

(3) 可否再修正以上 batch , Thanks!

TOP

好象我浪费论坛资源了,不过真是无心的,斑竹原谅

TOP

我晕还是有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 编辑 ]

TOP

(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键替换,似乎无法排版

TOP

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

[ 本帖最后由 sgaizxt001 于 2010-4-25 22:37 编辑 ]

TOP

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

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 编辑 ]

TOP

你再看看7楼的代码可以不。

TOP

看样子不行 , 結果如下:

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

TOP

这样的话,问题还是不严重。对临时文件只输入完整路径,然后去掉相同的行,在最后的输出里在输出你想要的东西就可以了
  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
复制代码
努力学习,努力挣分

TOP

@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.

请按任意键继续 . . .
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
命令语法不正确。
请按任意键继续 . . .

TOP

我这里没有办法测试,因为我是初学者,写的代码不能一次成功,需要测试修改才能用,而且不具有通用性。你及时给提出问题,我好修改,不过浪费了你的时间真不好意思
努力学习,努力挣分

TOP

返回列表