You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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),这种方法比固定截取字符更通用,即使文件名里有多个句号也能正确提取。
  • 容错处理:
    • 自动创建目标文件夹,避免复制失败
    • 检查源文件是否存在,不存在时会给出警告而不是直接报错
    • 每次运行会清空旧的核心名列表,避免重复处理

使用方法

  1. 将脚本保存为CopyMatchingDocs.bat
  2. 修改脚本开头的路径配置,确保指向你的实际文件夹
  3. 双击运行脚本即可

内容的提问来源于stack exchange,提问作者Slygoth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:55:25