批处理文件%errorlevel%在if嵌套下的返回值问题

本机当前IP为192.168.1.254,目的是想通过IP来判断当前网段以便做其它操作。现在遇到%errorlevel%在if嵌套下的返回值不能改变,也就是继承第一个fi... 本机当前IP为192.168.1.254,目的是想通过IP来判断当前网段以便做其它操作。现在遇到%errorlevel%在if嵌套下的返回值不能改变,也就是继承第一个find时的值,为什么?当如何修改?

@echo off
@ipconfig >ip.txt
@find "192.168.2" ip.txt >nul
if %errorlevel%==1 (
@find "192.168.1" ip.txt >nul
if %errorlevel%==1 (
echo 当前为未知网段设置!!!
) else (
echo 当前为1网段设置!!!
)
) else (
echo 当前为2网段设置!!!
)
展开
 我来答
jd08139
2013-11-03 · TA获得超过3734个赞
知道大有可为答主
回答量:2174
采纳率:66%
帮助的人:2856万
展开全部
@echo off
setlocal enabledelayedexpansion
@ipconfig >ip.txt
@find "192.168.2." ip.txt >nul
if %errorlevel%==1 (
  @find "192.168.1." ip.txt >nul
  if !errorlevel!==1  (
    echo       当前为未知网段设置!!!
    ) else (
        echo      当前为1网段设置!!!
            )
   ) else (
    echo      当前为2网段设置!!!
)
pause

在一条完整的语句中或者说()中,两个相同的变量会被预处理,就变成了%errorlevel%=1,后面的%errorlevel%也等于1.启用延迟变量扩展后就可以正确处理.在for命令也是类似方法.

或者

@echo off
@ipconfig >ip.txt
@find "192.168.2." ip.txt >nul
if errorlevel==1 (
  @find "192.168.1." ip.txt >nul
  if errorlevel==1  (
    echo       当前为未知网段设置!!!
    ) else (
        echo      当前为1网段设置!!!
            )
   ) else (
    echo      当前为2网段设置!!!
)
pause
陈哥深惠通勤
2013-11-06 · TA获得超过1176个赞
知道小有建树答主
回答量:1909
采纳率:33%
帮助的人:838万
展开全部
find和findstr的返回值经常会不符合你的预期的。。。建议还是用管道符号&&和||
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式