无忧启动论坛

标题: 循环检测的批处理 运行失败。 [打印本页]

作者: icevan    时间: 2017-12-16 16:23
标题: 循环检测的批处理 运行失败。
本帖最后由 icevan 于 2017-12-16 16:29 编辑
  1. :netstatus
  2. for /f "tokens=1,2 delims=:" %%a in ('ipconfig') do (
  3.      if "%%a" equ "以太网适配器 本地连接" set "flag=a"
  4.      if defined flag set /a n+=1
  5.      if !n! equ 6 set "ip=%%b"
  6. )
  7. set Gateway=%ip:~1%
  8. if "%Gateway%"=="" (
  9.         echo.
  10.         echo 连接失败.等待5秒后重试.
  11.         timeout 5 /nobreak >nul       
  12.         goto netstatus
  13. )
复制代码


对这个变量始终搞不清楚。
作者: chishingchan    时间: 2017-12-16 21:10
这是批处理局部程序是吧!?否则05行的 !n!不对了!
作者: slore    时间: 2017-12-16 21:59
在循环前初始化n为0,清空flag定义。

:netstatus
set /a n=0
set flag=

for /f "tokens=1,2 delims=:" %%a in ('ipconfig') do (
   ...
)
作者: icevan    时间: 2017-12-16 22:27
slore 发表于 2017-12-16 21:59
在循环前初始化n为0,清空flag定义。

:netstatus

谢谢 高手指点。
晓得问题出在哪里了。
就是循环的时候变量n没有清空,
造成if后面的赋值命令始终没有执行。
太感谢了。
作者: icevan    时间: 2017-12-16 23:02
  1. :netstatus
  2. set flag=
  3. for /f "tokens=1,2 delims=:" %%a in ('ipconfig') do (
  4.         if "%%a" equ "以太网适配器 本地连接" set "flag=1"
  5.         if "!flag!"=="1" (if "%%a"=="   默认网关. . . . . . . . . . . . . " set "Gateway=%%b")
  6. )
  7.          
  8. if "%Gateway%"==" " (
  9.         echo.
  10.         echo 连接失败.等待5秒后重试......
  11.         timeout 5 /nobreak >nul
  12.         goto netstatus
  13. )
复制代码


搞定了。没有用获取固定行数的内容的方法,
因为命令回显的行数不固定。
微软也是故意折腾,不同版本的命令回显都不一样。

作者: kingshui    时间: 2017-12-17 13:42
icevan 发表于 2017-12-16 23:02
搞定了。没有用获取固定行数的内容的方法,
因为命令回显的行数不固定。
微软也是故意折腾,不同版本 ...

只是查网关信息?那直接用ipconfig |find "网关地址" 来查不更简单些么?
作者: icevan    时间: 2017-12-17 14:54
kingshui 发表于 2017-12-17 13:42
只是查网关信息?那直接用ipconfig |find "网关地址" 来查不更简单些么?

如果有多个网卡呢?用find只能得到最后一个连接的网关地址。
这里我需要的是网关地址。
其他地方可以改成获取别的信息。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3