Windows批处理查找字符串脚本异常:始终返回服务正常
问题诊断与修正方案
嘿,我一眼就瞅出你脚本里的核心问题啦——你搞反了findstr的ERRORLEVEL判断逻辑!
先给你掰扯清楚findstr的退出规则:
- 当
findstr成功匹配到目标字符串(也就是Lost = 0存在于out.txt中)时,它的ERRORLEVEL是0 - 当找不到匹配内容时,ERRORLEVEL才是1
而你的脚本里写的是if ERRORLEVEL 1 ( @echo service is up >result.txt ),这就意味着:只有当找不到Lost = 0的时候,才会输出"service is up",完全和你想要的逻辑反过来了!这就是为什么你不管文件里有没有目标字符串,结果都不对的原因(大概率是你else分支的代码没写完,但核心逻辑已经错了)。
修正后的脚本(两种写法都可以):
写法一:用ERRORLEVEL条件判断
@echo off findstr /c:"Lost = 0" "out.txt" >nul if ERRORLEVEL 1 ( echo service is down >result.txt ) else ( echo service is up >result.txt )
写法二:直接判断ERRORLEVEL等于0(更直观)
@echo off findstr /c:"Lost = 0" "out.txt" >nul if %errorlevel% equ 0 ( echo service is up >result.txt ) else ( echo service is down >result.txt )
额外小提示:
@echo off最好放在脚本最开头,统一关闭命令行的命令回显,不用在每个echo前加@findstr /c:"Lost = 0"的写法是对的,/c:参数能确保你匹配的是包含空格的完整字符串,不会拆分成多个单词匹配
内容的提问来源于stack exchange,提问作者acr
相关产品推荐
相关产品推荐

