找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30113|回复: 11

[文件操作] 批处理如何实现在10T的文件夹下快速搜索指定文件,并且只在第一次搜索到就执行命令

[复制链接]
发表于 2021-2-27 17:59:22 | 显示全部楼层 |阅读模式
我打算实现功能如下:
在某路径下查找指定文件名的文件,找到后把该文件复制到其他路径下
我写的代码如下:
for /f "delims=" %%i in ('dir /s/b/a-d "文件名.mp4"') do (copy "%%i" "%filepath%"\)
这个代码之前执行的挺好,但是现在要在一个非常大的服务器上搜索,差不多10T左右。这样搜索效率就非常差,文件查找的非常慢,而且如果查找到3个同样名称的文件,会复制3次,而且还会找到自己文件夹里面的文件,然后报个错误“”文件无法自身复制“(要复制的路径在要搜索的路径的子目录下面)。
请问下如何优化?
1、怎么样搜索最快?
2、怎么样才能实现第一次找到文件,就执行copy的动作
3、如何实现在不同的目录下搜索?比如在我要搜索的路径如root目录下面有A/B/C/D 4个文件夹,A目录下又有A1/A2/A3文件夹,B目录下又有B1/B2/B3文件夹
     如何实现只在A1文件夹和B1文件夹中搜索那?
4、有没有其他好的方法实现这个功能?比如Python或者其他语言?
多谢大佬们。
发表于 2021-2-27 18:58:34 | 显示全部楼层
将该目录添加到索引中。然后在Explorer中查找 文件名.mp4 会快很多。但是创建索引需要较长时间和磁盘空间;创建后以后搜索就快了。
发表于 2021-2-27 19:15:01 | 显示全部楼层
for /r %%i in (*文件名.mp4) do if "%%i"=="文件名.mp4" copy "%%i" "%filepath%"\ && goto :done
:done
pause

试试
 楼主| 发表于 2021-2-27 19:21:05 | 显示全部楼层
我的脚本可能是要搜索非常多的文件,如下
for /r %%i in (*文件名.mp4) do if "%%i"=="文件名.mp4" copy "%%i" "%filepath%"\
for /r %%i in (*文件名.mp4) do if "%%i"=="文件名2.mp4" copy "%%i" "%filepath%"\
for /r %%i in (*文件名.mp4) do if "%%i"=="文件名3.mp4" copy "%%i" "%filepath%"\
这样再每一行叫goto是不是就不能执行下一个脚本命令了呀?
比如如下,这样是不是就不会执行查找文件名2的命令了呀?

for /r %%i in (*文件名.mp4) do if "%%i"=="文件名.mp4" copy "%%i" "%filepath%"\ && goto :done
for /r %%i in (*文件名.mp4) do if "%%i"=="文件名2.mp4" copy "%%i" "%filepath%"\ && goto :done

:done
pause
 楼主| 发表于 2021-2-27 19:22:12 | 显示全部楼层
回复 2# flashercs
文件是在服务器上,待查找并复制的文件有1000多个,用explorer是不是不能自动批量执行啊?
发表于 2021-2-27 22:39:58 | 显示全部楼层
回复 4# crestcn
注意保存ansi编码
只要有一个文件没找到,就会继续查找,直到所有文件全部被遍历,然后退出
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. set "files="文件名1.mp4" "文件名2.mp4" "文件名3.mp4""
  4. for /r %%i in (*) do (
  5.         for %%a in (!files!) do (
  6.                 if "%%~a"=="%%~nxi" (
  7.                         echo 找到%%~a
  8.                         echo copy "%%i" "%filePath%"
  9.                         set "files=!files:%%a=!"
  10.                         if "!files: =!"=="" set "files=NULL" & goto :done
  11.                         echo -------------------
  12.                 )
  13.         )
  14. )
  15. :done
  16. echo.
  17. echo 查找完成!
  18. echo 未找到数据: %files%
  19. echo.
  20. pause&exit
复制代码
 楼主| 发表于 2021-3-1 09:43:56 | 显示全部楼层
回复 6# went
多谢大佬,我研究下
但是这个脚本会存在一个问题,我是从excel表单上拼接的脚本,吧要搜索的文件和要存放的地方,拼接起来成一个脚本
每个要搜索的文件都对应不同的存放路径,你这个脚本只能放在一个固定的路径下面吧,如何能实现不同的文件放在不同的路径下面那?
发表于 2021-3-1 13:35:28 | 显示全部楼层
回复 7# crestcn

    查找C盘windows路径
    for /r "C:\Windows" %%i
 楼主| 发表于 2021-3-1 14:31:08 | 显示全部楼层
回复 8# went
如何做到copy到不同的路径那?比如查找文件A,放到路径A下面,查找路径B,放到路径B下面,比如下面脚本中%filePath%是不同的,不是同样的路径。
echo copy "%%i" "%filePath%"
发表于 2021-3-1 19:11:21 | 显示全部楼层
回复 9# crestcn
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. set "files="文件名1.mp4^|C:\文件夹1" "文件名2.mp4^|C:\文件夹2" "文件名3.mp4^|C:\文件夹3""
  4. for /r %%i in (*) do (
  5.         for %%a in (!files!) do (
  6.                 for /f "tokens=1* delims=|" %%b in ("%%~a") do (
  7.                         if "%%b"=="%%~nxi" (
  8.                                 echo 找到%%b
  9.                                 mkdir "%%c" >nul 2>nul
  10.                                 echo copy "%%i" "%%c"
  11.                                 set "files=!files:%%a=!"
  12.                                 if "!files: =!"=="" set "files=NULL" & goto :done
  13.                                 echo -------------------
  14.                         )
  15.                 )
  16.         )
  17. )
  18. :done
  19. echo.
  20. echo 查找完成!
  21. echo 未找到数据: %files%
  22. echo.
  23. pause&exit
复制代码
 楼主| 发表于 2021-3-2 09:31:25 | 显示全部楼层
回复 10# went
多谢大佬!!
如果把要查找的文件放到一个txt文件中,脚本读取这个文件中的内容然后查找并copy可以实现吗?同时指定查找的目录为C:/目录A/子目录A1,C:/目录B/子目录B2
比如a.txt,内容如下
"文件名1.mp4^|C:\文件夹1"
"文件名2.mp4^|C:\文件夹2"
"文件名3.mp4^|C:\文件夹3"
发表于 2021-3-2 22:46:09 | 显示全部楼层
回复 11# crestcn

第3行改为
  1. for /f "usebackq delims=" %%i in ("a.txt") do set "files=!files! "%%i""
复制代码
a.txt内容如下,ansi编码
  1. 文件名1.mp4|C:\文件夹1
  2. 文件名2.mp4|C:\文件夹2
  3. 文件名3.mp4|C:\文件夹3
复制代码
指定路径查找见8楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 12:05 , Processed in 0.019310 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表