批处理脚本如何识别文本文件行中的空文件版本值?
批处理脚本读取sigcheck输出的文件版本并判断空值
问题分析
你当前的脚本无法正确判断版本值为空的情况,核心原因是:
- 原
for /f的delims参数没覆盖制表符,导致冒号后的空白(制表符+空格)无法被正确分割 - 直接判断
"%%n"==""无效,因为%%n可能包含未被过滤的空白字符(而非空字符串) - 当
%%n为空白时,执行echo %%n会输出ECHO is off.,这是批处理中echo空内容的默认提示
解决方法
以下两种方案都能不依赖固定空格数,自动处理制表符和任意数量空格的情况:
方案1:利用内层for/f自动过滤空白
这种方法最简洁,利用for /f默认忽略开头空白的特性:
@echo off for /f "tokens=1* delims=:" %%a in (FileVer.txt) do ( rem 只匹配包含"File version:"的行 if /i "%%a"==" File version" ( rem 内层for/f自动过滤%%b开头的所有空白(空格+制表符) for /f "tokens=*" %%c in ("%%b") do ( if "%%c"=="" ( echo 版本值为空 & pause ) else ( echo 文件版本:%%c rem 在这里编写你的其他业务逻辑 ) ) ) )
方案2:手动去除首尾空白(支持延迟扩展)
如果需要保留中间的空白(虽然版本号一般没有),可以用这种方法手动清理首尾的空格和制表符:
@echo off setlocal enabledelayedexpansion for /f "tokens=1* delims=:" %%a in (FileVer.txt) do ( if /i "%%a"==" File version" ( rem 将冒号后的内容存入变量 set "ver_content=%%b" rem 去除开头的空格 for /f "tokens=* delims= " %%c in ("!ver_content!") do set "ver_content=%%c" rem 去除开头的制表符 for /f "tokens=* delims= " %%c in ("!ver_content!") do set "ver_content=%%c" rem 判断处理后的内容是否为空 if "!ver_content!"=="" ( echo 版本值为空 & pause ) else ( echo 文件版本:!ver_content! rem 在这里编写你的其他业务逻辑 ) ) ) endlocal
关键说明
- 两种方案都先通过
delims=:将行分割为冒号前后两部分,精准定位到版本值所在的区域 - 内层
for /f或变量替换操作,能自动处理任意数量的空格和制表符,无需硬编码空格数 - 判断空值时,直接对比处理后的变量与空字符串即可,不会再出现
ECHO is off.的问题
内容的提问来源于stack exchange,提问作者M4L3_2024
相关产品推荐
相关产品推荐

