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

如何用批处理提取指定编号并依次传入现有脚本执行?

批处理自动化提取图纸编号并按规则执行复制

以下是完全基于原生批处理实现的解决方案,可自动从文本文件提取图纸编号,严格遵循先处理所有FULL SIZE/FULLSIZE行,再处理HALF SIZE行的顺序,行内编号保留原输入顺序:

完整脚本代码

@echo off
setlocal enabledelayedexpansion

:: -------------------------- 配置区(请根据实际情况修改) --------------------------
set "txtFile=C:\Users\Production\Desktop\图纸清单.txt"  :: Word导出的文本文件路径
set "LR=LEFT"                                          :: 图纸文件名中的LR标识(如LEFT/RIGHT)
set "Lot=12345"                                        :: 批次编号
set "input=C:\Path\To\PDF_Files"                       :: PDF文件所在目录
set "logFile=C:\Users\Production\Desktop\Temp\log.txt" :: 日志文件路径
:: ---------------------------------------------------------------------------------

:: 初始化日志文件
echo 任务启动: %date% %time% > "%logFile%"

:: 切换到PDF文件目录
cd /d "%input%"

:: 第一步:处理所有标注FULL SIZE/FULLSIZE的行
echo 开始处理FULL SIZE图纸... >> "%logFile%"
for /f "delims=" %%a in ('findstr /i "FULL" "%txtFile%"') do (
    :: 提取"pages "之后、"("之前的编号字符串
    for /f "tokens=3* delims=()" %%b in ("%%a") do (
        set "pageStr=%%b"
        :: 将逗号替换为空格,拆分出单个编号
        set "pageStr=!pageStr:,= !"
        :: 逐个处理每个编号
        for %%s in (!pageStr!) do (
            call :processSheet "%%s"
        )
    )
)

:: 第二步:处理所有标注HALF SIZE的行
echo 开始处理HALF SIZE图纸... >> "%logFile%"
for /f "delims=" %%a in ('findstr /i "HALF SIZE" "%txtFile%"') do (
    for /f "tokens=3* delims=()" %%b in ("%%a") do (
        set "pageStr=%%b"
        set "pageStr=!pageStr:,= !"
        for %%s in (!pageStr!) do (
            call :processSheet "%%s"
        )
    )
)

echo 任务完成: %date% %time% >> "%logFile%"
endlocal
exit /b

:: -------------------------- 子过程:处理单个图纸编号 --------------------------
:processSheet
set "sheet=%~1"
:: 移除编号前后的冗余空格
for /f "tokens=*" %%t in ("%sheet%") do set "sheet=%%t"
if not defined sheet goto :eof

echo 正在处理图纸: %sheet% >> "%logFile%"

:: 检查标准命名格式的PDF文件
if exist "*-%LR%-%sheet%.pdf" (
    echo 找到文件: *-%LR%-%sheet%.pdf >> "%logFile%"
    for %%f in (*%LR%-%sheet%.pdf) do echo 匹配文件: %%f >> "%logFile%"
    goto :performCopy
)

:: 检查带短横线后缀的变体格式(可根据实际文件名规则扩展)
:checkdash
if exist "*-%LR%-%sheet%-*.pdf" (
    echo 找到带后缀的文件: *-%LR%-%sheet%-*.pdf >> "%logFile%"
    for %%f in (*%LR%-%sheet%-*.pdf) do echo 匹配文件: %%f >> "%logFile%"
    goto :performCopy
)

:: 未找到文件时记录日志
echo 错误: 未找到图纸%sheet%对应的文件 >> "%logFile%"
goto :eof

:: 执行文件复制逻辑
:performCopy
set "counter=1"
:: 找到可用的计数器编号(避免覆盖已有文件)
:copyLoop
if exist "C:\Users\Production\Desktop\Temp\Catch\%Lot%\*!counter!_*.*" (
    set /a counter+=1
    goto :copyLoop
)

:: 执行复制并记录结果
for %%f in (*%LR%-%sheet%.pdf) do (
    xcopy /i /y "*%LR%-%sheet%.pdf" "C:\Users\Production\Desktop\Temp\Catch\%Lot%\!counter!_%%f" >> "%logFile%" 2>&1
    if !errorlevel! equ 0 (
        echo 成功: 已复制%%f到!counter!_%%f >> "%logFile%"
    ) else (
        echo 错误: 复制%%f失败 >> "%logFile%"
    )
)

goto :eof

关键说明

  1. 编码要求:将Word导出的文本文件保存为ANSI编码,避免UTF-8 BOM导致批处理读取异常
  2. 规则适配:如果图纸文件名有其他变体(如不同分隔符、前缀),可在:checkdash部分扩展更多if exist判断
  3. 变量替换:必须修改脚本开头配置区的txtFile、LR、Lot、input为实际路径和值
  4. 日志记录:脚本会自动生成详细操作日志,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:33:17