如何修改批处理脚本为普通和带_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
相关产品推荐
相关产品推荐

