windows bat 在目录下(包括子目录)搜索批量指定文件名称复制到另一个文件夹内
前言:最近遇到一个需求,我有15个文件夹(可能包含子文件夹) ,目前我有一批文件名称,需要在这15个文件夹中查找出来,并拷贝到一个新的文件夹内,由于一个一个搜索拷贝比较麻烦,所以写了这么一段bat 代码来处理此事,效率提升几百倍,欢迎有需要的同学参考。如果有其他问题一讨论。
搜索文件名称列表:
1_d7b59495aaa24adc932c242d5570a57a_115.png
1_d7b59495aaa24adc932c242d5570a57a_176.png
1_d7b59495aaa24adc932c242d5570a57a_211.png
1_d7b59495aaa24adc932c242d5570a57a_212.png
…
需要在下面的文件夹中找到上面文件名称,复制到新的文件夹内,一个一个复制真要命 o(╥﹏╥)o
写了代码如下:
file_patterns.ini 内容如下
1_d7b59495aaa24adc932c242d5570a57a_115.png
1_d7b59495aaa24adc932c242d5570a57a_176.png
1_d7b59495aaa24adc932c242d5570a57a_211.png
file_search.bat 文件代码如下
@echo off
setlocal enabledelayedexpansion
:: 内置路径参数 src 源端文件夹 dst目标文件夹
set "src=E:\0522"
set "dst=E:\bug1"
:: 配置文件路径 file_patterns.ini 跟 file_search.bat 在同一目录下
set CONFIG_FILE=file_patterns.ini
:: 检查配置文件是否存在
if not exist "%CONFIG_FILE%" (
echo 错误: 配置文件 %CONFIG_FILE% 不存在
pause
exit /b 1
)
:: 读取文件模式
set "file_list="
for /f "usebackq delims=" %%a in ("%CONFIG_FILE%") do (
if not "%%a"=="" (
set "file_list=!file_list! "%%a""
)
)
:: 验证必要参数
if not defined src (
echo 错误: 缺少 source_dir 参数
pause
exit /b 1
)
if not defined file_list (
echo 错误: 配置文件中没有有效的文件模式
pause
exit /b 1
)
:: 创建目标目录(如果不存在)
mkdir "%dst%" 2>nul
:: 执行批量复制
set counter=0
set not_found=0
for %%F in (%file_list%) do (
echo 正在搜索文件: %%F
set "found=0"
for /r "%src%" %%i in (%%~F) do (
if exist "%%i" (
echo 文件存在=====》正在复制: %%~nxi
copy /y "%%i" "%dst%\" >nul
echo %%~nxi 复制完成
set /a counter+=1
set "found=1"
)
)
if "!found!"=="0" (
echo 文件不存在: %%F
set /a not_found+=1
)
)
echo 操作完成,共处理 !counter! 个文件,!not_found! 个文件未找到
pause
执行结果:
E:\>file_search.bat
正在搜索文件: "1_d7b59495aaa24adc932c242d5570a57a_115.png"
文件存在===》正在复制: 1_d7b59495aaa24adc932c242d5570a57a_115.png
正在搜索文件: "1_d7b59495aaa24adc932c242d5570a57a_176.png"
文件存在===》正在复制: 1_d7b59495aaa24adc932c242d5570a57a_176.png
正在搜索文件: "1_d7b59495aaa24adc932c242d5570a57a_211.png"
文件存在===》正在复制: 1_d7b59495aaa24adc932c242d5570a57a_211.png
操作完成,共处理 3 个文件
Press any key to continue . . .
't' is not recognized as an internal or external command,
operable program or batch file.
操作完成,共处理 3 个文件, 个文件未找到
Press any key to continue . . .