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

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

我打算实现功能如下:
在某路径下查找指定文件名的文件,找到后把该文件复制到其他路径下
我写的代码如下:
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或者其他语言?
多谢大佬们。

我的脚本可能是要搜索非常多的文件,如下
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

TOP

回复 2# flashercs
文件是在服务器上,待查找并复制的文件有1000多个,用explorer是不是不能自动批量执行啊?

TOP

回复 6# went
多谢大佬,我研究下
但是这个脚本会存在一个问题,我是从excel表单上拼接的脚本,吧要搜索的文件和要存放的地方,拼接起来成一个脚本
每个要搜索的文件都对应不同的存放路径,你这个脚本只能放在一个固定的路径下面吧,如何能实现不同的文件放在不同的路径下面那?

TOP

回复 8# went
如何做到copy到不同的路径那?比如查找文件A,放到路径A下面,查找路径B,放到路径B下面,比如下面脚本中%filePath%是不同的,不是同样的路径。
echo copy "%%i" "%filePath%"

TOP

回复 10# went
多谢大佬!!
如果把要查找的文件放到一个txt文件中,脚本读取这个文件中的内容然后查找并copy可以实现吗?同时指定查找的目录为C:/目录A/子目录A1,C:/目录B/子目录B2
比如a.txt,内容如下
"文件名1.mp4^|C:\文件夹1"
"文件名2.mp4^|C:\文件夹2"
"文件名3.mp4^|C:\文件夹3"

TOP

返回列表