编写Bat脚本:提取核心文件名并匹配复制对应.doc文件
批处理脚本实现方案
我帮你写了一个完全匹配需求的Bat脚本,还加了一些实用的容错处理,下面是完整代码和详细解释:
完整脚本代码
@echo off setlocal enabledelayedexpansion :: -------------------------- 请根据实际情况修改以下路径 -------------------------- set "FolderB=.\Folder B" :: 存放*.doc.pdf文件的文件夹 set "FolderA=.\Folder A" :: 存放*.doc文件的源文件夹 set "OutputList=.\CoreNames.txt" :: 保存核心文件名的TXT路径 set "TargetFolder=.\CopiedFiles" :: 复制后文件的目标文件夹 :: ----------------------------------------------------------------------------- :: 创建目标文件夹(如果不存在) if not exist "%TargetFolder%" mkdir "%TargetFolder%" :: 第一步:提取Folder B中所有*.doc.pdf文件的核心文件名到TXT echo [步骤1] 正在提取Folder B中的核心文件名... if exist "%OutputList%" del "%OutputList%" :: 清空旧的列表文件 for %%f in ("%FolderB%\*.doc.pdf") do ( :: 先获取不带后缀的文件名(例如:123.doc.pdf → 123.doc) set "TempName=%%~nf" :: 再按英文句号分割,取第一个部分作为核心文件名(123.doc → 123) for /f "delims=." %%n in ("!TempName!") do set "CoreName=%%n" :: 将核心文件名写入TXT echo !CoreName!>>"%OutputList%" ) echo ✅ 核心文件名已保存到:%OutputList% :: 第二步:根据TXT列表从Folder A复制对应.doc文件 echo. echo [步骤2] 开始从Folder A复制对应文件... for /f "usebackq delims=" %%n in ("%OutputList%") do ( set "SourceFile=%FolderA%\%%n.doc" if exist "!SourceFile!" ( copy "!SourceFile!" "%TargetFolder%\" >nul echo 已复制:%%n.doc ) else ( echo ⚠️ 警告:!SourceFile! 不存在,跳过该文件 ) ) echo. echo 🎉 复制操作完成!已复制的文件存放在:%TargetFolder% pause endlocal
关键部分解释
- 路径配置区:开头的几个
set命令是可配置的,你可以根据自己的实际文件夹路径修改,注意路径包含空格时要加引号。 - 核心文件名提取:
%%~nf用于获取文件的“文件名+一级后缀”(比如123.doc.pdf会变成123.doc)- 再用
for /f "delims=."按英文句号分割,取第一个分段就是我们要的核心名(123),这种方法比固定截取字符更通用,即使文件名里有多个句号也能正确提取。
- 容错处理:
- 自动创建目标文件夹,避免复制失败
- 检查源文件是否存在,不存在时会给出警告而不是直接报错
- 每次运行会清空旧的核心名列表,避免重复处理
使用方法
- 将脚本保存为
CopyMatchingDocs.bat - 修改脚本开头的路径配置,确保指向你的实际文件夹
- 双击运行脚本即可
内容的提问来源于stack exchange,提问作者Slygoth
相关产品推荐
相关产品推荐

