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

[文件操作] [已解决]求助批处理从4个文件夹中提取相同的文件名

.
.
求助:从4个文件夹中取出相同的文件名,存放在   "9999.txt"中
4个文件夹,每个文件夹有好多个xls文件,而其中都有两个或数个相同的文件名称,现在要把这相同的文件名称取出来,在9999.txt文件中列示。
注:仅文件名称取出来,不相同的不列出来
哪位大佬,帮我码一下,谢谢。


以下是我对大佬们的各种贴子经过不断地观摹学习修改测试,确定了以下四个方案的代码,彻底符合了自已的要求。今天我这个新手很高兴,看到了批处理的强大。我一定要好好地学习,天天向上。呵呵。
4个文件夹分别为 1  2  3   4,各个文件夹中有各种文件,但其中有一个或数个同时在4个文件夹中同时都存在的文件


方案一,最佳最快,点击即完成
  1. echo off
  2. @echo off
  3. cd /d "%~dp0"
  4. if exist Ok.txt del /f OK.txt
  5. for %%i in (1\*.*) do echo %%~nxi>>1111.txt
  6. for %%j in (2\*.*) do echo %%~nxj>>2222.txt
  7. findstr /belig:1111.txt 2222.txt >W1.txt
  8. for %%k in (3\*.*) do echo %%~nxk>>3333.txt
  9. for %%m in (4\*.*) do echo %%~nxm>>4444.txt
  10. findstr /belig:3333.txt 4444.txt >W2.txt
  11. findstr /belig:w1.txt w2.txt >OK.txt
  12. del /f 1111.txt & del /f 2222.txt & del /f 3333.txt & del /f 4444.txt & del /f w1.txt & del /f w2.txt
  13. pause&exit
复制代码
方案二:第二快
  1. @echo off
  2. cd /d "%~dp0"
  3. if exist 1234Ok.txt del /f 1234OK.txt
  4. for /f "delims=" %%a in ('dir /s/b/a-d "1\"') do (
  5. echo %%~nxa >>W11.txt
  6. )
  7. for /f "delims=" %%b in ('dir /s/b/a-d "2\"') do (
  8. echo %%~nxb >>W22.txt
  9. )
  10. for /f "delims=" %%c in ('dir /s/b/a-d "3\"') do (
  11. echo %%~nxc >>W33.txt
  12. )
  13. for /f "delims=" %%d in ('dir /s/b/a-d "4\"') do (
  14. echo %%~nxd >>W44.txt
  15. )
  16. type "W11.txt" | findstr /belig:"w22.txt">1122.txt
  17. type "W33.txt" | findstr /belig:"w44.txt">3344.txt
  18. type "1122.txt" | findstr /belig:"3344.txt">1234OK.txt
  19. del /f w11.txt & del /f w22.txt & del /f w33.txt & del /f w44.txt & del /f 1122.txt & del /f 3344.txt
  20. pause&exit
复制代码
方案三 第三(稍慢)
  1. @echo off
  2. if exist OK08.txt del /f ok08.txt
  3. for /f "delims=" %%a in ('dir /s/b/a-d "1\"') do (
  4. for /f "delims=" %%b in ('dir /s/b/a-d "2\"') do (
  5. if "%%~nxa"=="%%~nxb" echo %%~nxa >>w1.txt
  6. ))
  7. for /f "delims=" %%i in ('dir /s/b/a-d "3\"') do (
  8. for /f "delims=" %%k in ('dir /s/b/a-d "4\"') do (
  9. if "%%~nxi"=="%%~nxk" echo %%~nxi >>w2.txt
  10. ))
  11. findstr /belig:w1.txt w2.txt >>OK08.txt
  12. del w1.txt & del w2.txt
  13. pause&exit
复制代码
方案四  超级超级慢 但像我这种新手理解起来很省力
  1. @echo off
  2. cd /d "%~dp0"
  3. if exist w13.txt del /f w13.txt
  4. for /f "delims=" %%a in ('dir /s/b/a-d "1\"') do (
  5. for /f "delims=" %%b in ('dir /s/b/a-d "2\"') do (
  6. for /f "delims=" %%c in ('dir /s/b/a-d "3\"') do (
  7. for /f "delims=" %%d in ('dir /s/b/a-d "4\"') do (
  8. if "%%~nxa"=="%%~nxb" if "%%~nxb"=="%%~nxc" if "%%~nxc"=="%%~nxd" echo %%~nxd >>w13.txt
  9. ))))
  10. pause&exit
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. powershell "dir 文件夹1,文件夹2,文件夹3,文件夹4 -Filter '*. xls' | group | Where-Object -Property Count -GE 2 | select -Property name | Out-File 9999.txt"
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 2# ivor


大师  测试不成功  我单位的电脑操作系统是 XP 和 WIN7,   没有完整的WIN10,可能 环境不适应,

TOP

自已顶  哪位大佬,帮我码一下,谢谢。

TOP

把下面的“文件夹1234”替换成文件夹路径,保存为*.bat,运行即可。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "doc1=文件夹1"
  4. set "doc2=文件夹2"
  5. set "doc3=文件夹3"
  6. set "doc4=文件夹4"
  7. echo.正在收集所有文件
  8. (for /l %%a in (1,1,4) do (dir /b /s "!doc%%a!"))>list.txt
  9. for /f "tokens=*" %%a in (list.txt) do (
  10. set name=%%~nxa
  11. if not defined _n!name! (set _n!name!=1) else (set _r!name!=1)
  12. )
  13. echo.正在收集重复的文件
  14. (echo.重复的文件
  15. for /f "delims==" %%a in ('set _r') do (
  16. set name=%%a
  17. set name=!name:~2!
  18. echo.==============
  19. echo.!name!
  20. echo.==============
  21. rem 显示具体路径去掉下一行的注释即可
  22. rem find "!name!" list.txt
  23. echo.
  24. )
  25. )>9999.txt
  26. echo.结果保存到了9999.txt
  27. del list.txt
  28. pause
  29. exit
复制代码
1

评分人数

TOP

回复 5# 路过


谢谢大师  这正是我要结果。

TOP

其实可以只遍历一个文件夹,其余3个文件夹不需要遍历
  1. @echo off
  2. for %%i in (1\*) do (
  3.     if exist "2\%%~nxi" if exist "3\%%~nxi" if exist "4\%%~nxi" echo;%%~nxi
  4. )
  5. pause
复制代码
1

评分人数

    • smss: 北冥神功技术 + 1

TOP

回复 7# WHY


大帅厉害,代码简洁,效率又高,速度又快,,同样的结果,效率却差别很大,批处理真是深奥啊,我又学到一招了,谢谢。

TOP

返回列表