BAT批处理:文件批量查找与复制
近期因为工作需要,经常要根据文件清单批量查找文件并复制到指定文件夹,手动操作十分繁琐。因此,参考本站文章编写了一个文件批量查找与复制的批处理程序。
参考文章:http://t.csdnimg.cn/aNciG
本文程序的主体代码来自上方参考文章,与其相比增加了手动输入相关参数的功能。
1、程序代码
@echo off
setlocal enabledelayedexpansion
echo -------------------------------- BEGIN ----------------------------------
rem set parameter here
rem dirCopy: 0-file copy, 1-directory copy
rem path do not end with backslash
rem sourcePath only support one path when use directory copy, multi path(separated by semicolons and make sure all path is exist) is available when use file copy
rem eg:
rem file copy:
rem set sourcePath=C:\Users\Desktop\test 1;C:\Users\Desktop\test2
rem set targetPath=C:\Users\Desktop\target
rem set fileList=list.txt
rem set dirCopy=0
rem directory copy:
rem set sourcePath=C:\Users\Desktop\test 1
rem set targetPath=C:\Users\Desktop\target
rem set fileList=list.txt
rem set dirCopy=1
set /p sourcePath=Source path:
set /p targetPath=Target path:
set /p fileList=Search file:
set /p dirCopy=Copy type(0-file,1-dir):
rem add double quotes
set before=!sourcePath!
set after=
echo Job running...
:QUOTE_LOOP
for /f "tokens=1* delims=;" %%i in ("!before!") do (
set after=!after!"%%i";
if not "%%j"=="" (
set before=%%j
goto QUOTE_LOOP
)
)
rem begin job
set /a copyCount=0
dir /s /b !after!>filelist.txt
if !dirCopy! equ 0 (
echo Start coping files...
goto FILE_COPY
)else (
echo Start coping file dir...
goto DIR_COPY
)
:FILE_COPY
for /f "delims=" %%i in (!fileList!) do (
find "\%%i" filelist.txt > findfile.txt
if !errorlevel! equ 0 (
for /f "skip=2 delims=" %%j in (findfile.txt) do (
copy /y "%%j" "!targetPath!\%%~nxj">nul
set /a copyCount+=1
)
)else (
echo Can't find file %%i
echo %%i >> failedfile.txt
)
)
goto END
:DIR_COPY
for /f "delims=" %%i in (!fileList!) do (
find "\%%i" filelist.txt > findfile.txt
if !errorlevel! equ 0 (
for /f "skip=2 delims=" %%j in (findfile.txt) do (
set tPath=%%~fj
set tPath=!tPath:%sourcePath%=!
echo f | xcopy /y "%%j" "!targetPath!!tPath!">nul
set /a copyCount+=1
)
)else (
echo Can't find file: %%i
echo %%i >> failedfile.txt
)
)
goto END
:END
del filelist.txt
del findfile.txt
echo Copy file success: !copyCount!
echo -------------------------------- END ----------------------------------
pause
2、操作指南
- 将上方代码复制至txt文件,将txt文件的后缀修改为BAT并保存。本文程序文件以“文件批量查找与复制 - 手动输入版.BAT”命名。
- 新建BATCopyFiles文件夹用来当做程序的操作空间,包含以下文件(夹):source文件夹、target文件夹、list.txt、文件批量查找与复制 - 手动输入版.BAT。
注意:文件夹路径不能包含中文!!!source文件夹 用来存放需要用于查找的文件库 target文件夹 用来复制、存放查找成功的文件 list.txt 内容为需要查找复制的文件清单,内容以换行区分,文件名可不包含后缀 文件批量查找与复制 - 手动输入版.BAT 内容为程序代码 - 双击“文件批量查找与复制 - 手动输入版.BAT”运行程序,依次输入参数。
Source path: source 源文件夹,可填其他文件夹的绝对路径 Target path: target 目标文件夹,可填其他文件夹的绝对路径 Search file: list.txt 文件清单 Copy type(0-file,1-dir): 0/1 复制类型:0-文件,1-文件及完整路径 -
查看输出结果。
查询成功的文件将会被复制至target文件夹;查询失败的文件将会被记录在自动生成的failedfile.txt文件中。