如何修改批处理脚本实现从指定目录所有子文件夹复制指定文件?
批处理脚本修改:递归搜索所有子文件夹并复制指定文件
需求与现有问题
- 要从
D:\move_script的所有子文件夹中,找出List.txt(每行一个文件名)里的500个图像文件,复制到本地目标文件夹。 - 当前脚本问题:指定
SourceFolder时提示文件未找到;指定单个子文件夹data时,仅在该文件夹内搜索,无法遍历所有子目录。
修改后的脚本
pushd D:\move_script :: 自动创建目标文件夹(如果不存在) mkdir ".\DestinationFolder\" 2>nul :: 遍历List.txt中的每个文件名 for /f "tokens=* delims=" %%a in ('type List.txt') do ( :: 递归搜索当前目录下所有子文件夹中匹配的文件 for /r ".\" %%b in ("%%a") do ( :: 复制找到的文件到目标文件夹 xcopy /hrkvy "%%b" ".\DestinationFolder\" ) ) popd
关键修改说明
for /r ".\" %%b in ("%%a"):使用/r参数开启递归遍历,.代表当前目录(即D:\move_script),会自动搜索所有子文件夹中与%%a(List.txt中的文件名)匹配的文件。- 外层循环负责读取
List.txt的每一行文件名,内层循环负责递归定位文件,找到后调用xcopy完成复制。 - 保留原
xcopy参数:/h包含隐藏/系统文件,/r覆盖只读文件,/k保留文件属性,/v验证复制完整性,/y跳过覆盖确认提示。
额外提示
- 如果
List.txt中的文件名包含空格或特殊字符,for /f的tokens=* delims=参数已确保能读取完整的文件名。 mkdir ".\DestinationFolder\" 2>nul会自动创建目标文件夹,2>nul用于屏蔽文件夹已存在的错误提示。
内容的提问来源于stack exchange,提问作者Gourab Kumar
相关产品推荐
相关产品推荐

