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

如何修改批处理脚本为普通和带_asm后缀的stp文件插入修订号?

问题原因

你写的脚本异常核心有三个原因:

  • 批处理默认启用变量预解析机制:if/else 属于同一个代码块,cmd 会在脚本启动时就把块内所有 %变量名% 格式的变量替换为脚本启动时的初始值,不会读取代码运行过程中更新的变量值,所以 str1 取值异常。
  • 存在笔误:else 分支中你错误将后缀写为 _rex,实际应该是 _rev。
  • 原有硬编码截取路径前21位的写法兼容性很差,只要文件夹路径长度变动就会截取错误。
修复后的完整脚本
@echo off
:: 开启延迟变量扩展,代码块内用!变量名!读取实时值
setlocal enabledelayedexpansion

:: 读取修订号
for /F "usebackq tokens=2" %%a IN (`findstr REVISION C:\PUBLISH_WORKSPACE\*.txt`) do (
  SET Rev=%%a
)

:: 处理STP文件(每次仅1个)
FOR %%S IN (c:\publish_workspace\*.STP) DO (
    SET "file_full=%%S"
    SET "file_name=%%~nS"
    :: 判断是否为_asm结尾的文件
    echo.!file_name!|findstr /C:"_asm" >nul 2>&1
    if not errorlevel 1 (
        :: 去掉_asm后缀后拼接修订号
        ren "!file_full!" "!file_name:~0,-4!_rev!Rev!.stp"
    ) else (
        :: 普通文件直接拼接修订号
        ren "!file_full!" "!file_name!_rev!Rev!.stp"
    )
)

:: 后续移动、清理逻辑
move c:\publish_workspace\*.stp c:\publish_workspace\stp
del c:\publish_workspace\*.txt
EXIT
逻辑说明
  • 开启延迟变量扩展后,代码块内用 !变量名! 格式即可读取运行时的实时变量值,解决原脚本变量取值异常的问题
  • 直接用 for 循环的拓展参数 %%~nS 读取不带后缀的文件名,不需要硬编码截取路径,兼容性更强
  • 匹配到带_asm的文件时,去掉文件名最后4位(即_asm)再拼接修订号,普通文件直接拼接即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:36:01