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

编写批处理脚本:根据文件内容提取关键字批量重命名文件求助

批量重命名发票文件解决方案

以下是修正后的批处理脚本,可实现遍历目录下的.txt文件,提取Invoice No和Account Code对应的值,并按要求重命名文件:

@echo off
setlocal enabledelayedexpansion

for %%F in (*.txt) do (
    set "invoiceNo="
    set "accountCode="
    :: 逐行读取文件内容,提取目标值
    for /f "usebackq tokens=1-4 delims=: " %%A in ("%%F") do (
        if "%%A %%B" equ "Invoice No" (
            set "invoiceNo=%%D"
        ) else if "%%A %%B" equ "Account Code" (
            set "accountCode=%%D"
        )
    )
    :: 验证值是否完整,再执行重命名
    if defined invoiceNo if defined accountCode (
        ren "%%F" "%%~nF_!invoiceNo!_!accountCode!.txt"
        echo 已完成重命名:"%%F" → "%%~nF_!invoiceNo!_!accountCode!.txt"
    ) else (
        echo 警告:文件"%%F"未找到完整的发票编号或账户代码,跳过处理
    )
)

endlocal

脚本关键说明

  • 延迟变量扩展:通过setlocal enabledelayedexpansion启用,确保在for循环内部能正确引用动态变化的变量(用!变量名!代替%变量名%)。
  • 内容提取逻辑:内层for /f循环以:和空格作为分隔符,逐行解析文件内容,匹配到目标行时提取对应的值(%%D即为冒号后第一个非空格的有效内容)。
  • 安全重命名:使用%%~nF获取原文件的主名(不含扩展名),保留原文件名前缀后拼接提取到的编号和代码,避免丢失原有标识。
  • 错误处理:增加值存在性检查,仅当两个目标值都成功提取时才执行重命名,避免无效操作。

原脚本问题分析

  1. 未启用延迟变量扩展,导致循环内变量引用失效;
  2. 使用SET /P读取临时文件仅能获取第一行内容,无法正确读取第二行的账户代码;
  3. 重命名逻辑丢失了原文件名的前缀,不符合需求;
  4. 依赖临时文件增加了出错风险,且未做有效性校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:50:25