批量复制多子文件夹中含指定字符串文件的批处理需求
批处理脚本:按指定规则批量复制并重命名文件
需求回顾
- 复制文件名包含指定字符串的文件
- 以批处理文件所在文件夹为根目录,遍历所有子文件夹
- 将文件复制到指定目标文件夹,无需保留原目录层级
- 遇到重复文件名时,自动按
文件名(序号).扩展名格式重命名
原脚本问题
你提供的脚本能实现基本的按文件名匹配复制,但没有处理重复文件名的情况,遇到同名文件会直接覆盖目标文件夹里的现有文件。
优化后的脚本
@Echo OFF SetLocal EnableDelayedExpansion :: 配置参数 Set "Pattern=status" Set "destinationFolder=c:\xxx\03-Ins\01-Mad\copied_files" Set "rootDir=%~dp0" :: 批处理所在文件夹作为根目录 :: 创建目标文件夹(如果不存在) If Not Exist "%destinationFolder%" MkDir "%destinationFolder%" :: 遍历根目录下所有子文件夹中的xlsx文件 For /R "%rootDir%" %%G in (*.xlsx) Do ( :: 检查文件名是否包含指定字符串 Echo %%~nxG | FIND "%Pattern%" 1>NUL && ( Set "fileName=%%~nG" Set "fileExt=%%~xG" Set "targetPath=%destinationFolder%\!fileName!!fileExt!" Set "counter=1" :: 检查文件是否存在,存在则递增序号 :CheckExists If Exist "!targetPath!" ( Set "targetPath=%destinationFolder%\!fileName!(^!counter^!)!fileExt!" Set /A counter+=1 Goto CheckExists ) :: 执行复制 Echo 复制: %%~G → !targetPath! Copy "%%~G" "!targetPath!" >NUL ) ) Echo 复制完成! Pause&Exit
关键逻辑说明
SetLocal EnableDelayedExpansion:启用延迟环境变量扩展,确保循环内的变量更新能实时生效%~dp0:获取批处理文件所在的文件夹路径,作为遍历的根目录- 重复文件名处理:通过循环检查目标路径是否存在,若存在则在文件名后添加递增的序号,直到找到可用的文件名
- 创建目标文件夹:提前判断目标文件夹是否存在,不存在则自动创建,避免复制失败
内容的提问来源于stack exchange,提问作者Shady Khalil Mohamady
相关产品推荐
相关产品推荐

