标题: [网络连接] [已解决]批处理怎样跳出for并执行循环后的代码? [打印本页]
作者: antony521 时间: 2010-4-18 20:27 标题: [已解决]批处理怎样跳出for并执行循环后的代码?
- @echo off
- :ready
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 set dns2=%%a.%%b.%%c&goto 0
- if /i "%%a %%b"=="Ethernet adapter" set NIC=%%c&set NIC=%NIC:~0,-1%
- if /i "%%a %%b"=="IP Address" set "ip=%%c"
- if /i "%%a %%b"=="Default Gateway" set "gateway=%%c"
- if /i "%%a %%b"=="DNS Servers" set "dns1=%%c")
-
- :0
- cls
- echo\
- echo 连接名称..: %NIC%
- echo 当前IP....: %ip%
- echo 网关......: %gateway%
- echo 当前DNS...: %dns1%
- echo 备用DNS...: %dns2%
- pause>nul
- :1
- call :ready
- ::测试网络代码........
- ping %ip% -n 2>nul&&echo 通||echo 不通
复制代码
.....
现在问题是:
1、测试网络代码段不需要显示各变量,也就是不能用goto 0来跳出for循环,用exit/goto :eof直接退出了也不行。
2、以上显示的%NIC%后面有个冒号,怎样在赋值时去掉?我的方法显示 连接名称..: ~0,-1不知道哪里错了.
[ 本帖最后由 antony521 于 2010-4-19 13:50 编辑 ]
作者: 随风 时间: 2010-4-18 20:33
Q:所发代码不止一行时请用 code 把代码扩起来
A:如何用code把代码扩起来 ,请点我。
call set NIC=%%NIC:~0,-1%%
或开启变量延迟
set NIC=!NIC:~0,-1!
作者: antony521 时间: 2010-4-18 21:59 标题: 回复 2楼 的帖子
不好使啊!老大!- @echo off
- setlocal enabledelayedexpansion
- :ready
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 set dns2=%%a.%%b.%%c&goto 0
- if /i "%%a %%b"=="Ethernet adapter" set NIC=%%c&set NIC=!NIC:~0,-1!
- if /i "%%a %%b"=="IP Address" set "ip=%%c"
- if /i "%%a %%b"=="Default Gateway" set "gateway=%%c"
- if /i "%%a %%b"=="DNS Servers" set "dns1=%%c")
-
- :0
- cls
- echo\
- echo 连接名称..: %NIC%
- echo 当前IP....: %ip%
- echo 网关......: %gateway%
- echo 当前DNS...: %dns1%
- echo 备用DNS...: %dns2%
- pause>nul
- :1
- call :ready
- ::测试网络代码........
- ping %ip% -n 2>nul&&echo 通||echo 不通
复制代码
最重要的第一个问题没有答复啊?
[ 本帖最后由 antony521 于 2010-4-18 22:04 编辑 ]
作者: GNU 时间: 2010-4-18 22:06 标题: 回复 3楼 的帖子
具体是哪里不好使啊?
作者: antony521 时间: 2010-4-18 22:14 标题: 回复 4楼 的帖子
echo 连接名称..: %NIC%
显示的NIC带有:号,用set NIC=!NIC:~0,-1!不能去掉.
第一个问题
1、测试网络代码段不需要显示各变量,也就是不能用goto 0来跳出for循环,用exit/goto :eof直接退出了也不行。
没能解决.帮帮忙好吗!
我想把这一段变成类似函数或过程供多处调用,这样就不能用goto 0这种方式跳出循环体,牵扯到别的过程了.
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 set dns2=%%a.%%b.%%c&goto 0
- if /i "%%a %%b"=="Ethernet adapter" set NIC=%%c&set NIC=%NIC:~0,-1%
- if /i "%%a %%b"=="IP Address" set "ip=%%c"
- if /i "%%a %%b"=="Default Gateway" set "gateway=%%c"
- if /i "%%a %%b"=="DNS Servers" set "dns1=%%c")
复制代码
不知道说没说明白,找一种能退出循环执行后面代码的方法.
[ 本帖最后由 antony521 于 2010-4-18 22:23 编辑 ]
作者: GNU 时间: 2010-4-18 22:30 标题: 回复 5楼 的帖子
把:后面的数字换成字母
作者: hanyeguxing 时间: 2010-4-18 22:47
专门被call 调用- :ready
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 set dns2=%%a.%%b.%%c&goto:eof
- if /i "%%a %%b"=="Ethernet adapter" set NIC=%%c&call set NIC=%%NIC:~0,-2%%
- if /i "%%a %%b"=="IP Address" set "ip=%%c"
- if /i "%%a %%b"=="Default Gateway" set "gateway=%%c"
- if /i "%%a %%b"=="DNS Servers" set "dns1=%%c")
- goto:eof
复制代码
放到批处理的最后边
最后的goto:eof是防止ipconfig/all中没有dns1而设置的。如果本标签在批处理最后面的时候,可以不用这个goto:eof。但如果下面还有别的标签,推荐用。主要的返回,是依靠for内的goto:eof完成的
[ 本帖最后由 hanyeguxing 于 2010-4-18 22:55 编辑 ]
作者: antony521 时间: 2010-4-19 12:31 标题: 回复 7楼 的帖子
set NIC=%%NIC:~0,-2%%里为什么是-2呢?没发现:号后面有空格呀!
if defined dns1 set dns2=%%a.%%b.%%c&goto:eof这句中的goto:eof我曾试过,程序直接就退出了,在你这里怎么就运行正常了,哪不对了呢?
作者: GNU 时间: 2010-4-19 12:37 标题: 回复 8楼 的帖子
因为ipconfig命令的结果里面有不可见字符
作者: hanyeguxing 时间: 2010-4-19 15:26
原帖由 antony521 于 2010-4-19 12:31 发表
set NIC=%%NIC:~0,-2%%里为什么是-2呢?没发现:号后面有空格呀!
if defined dns1 set dns2=%%a.%%b.%%c&goto:eof这句中的goto:eof我曾试过,程序直接就退出了,在你这里怎么就运行正常了,哪不对了呢?
1,正常的ANSI编码文本换行效果是由0D 0A(即回车符+换行符)实现的,而这里是0D 0D 0A,即前面多了一个回车符。
你可以把Ethernet adapter这一行:前的字符全去掉,其他行也全去掉,看看这个文本多少字节?
2,不要使用exit/goto :eof。
作者: antony521 时间: 2010-4-20 09:21 标题: 回复 10楼 的帖子
我把这个问题扩展一下吧?又遇到新的情况了.
前提条件是IP是从路由动态获取的.这个IPconfig/all的变化还真是多啊!静态的就没这么麻烦了.
C:\Documents and Settings\Administrator>ipconfig/all
Windows IP Configuration
Host Name . . . . . . . . . . . . : jishubu
Primary Dns Suffix . . . . . . . :
Node Type . . . . . . . . . . . . : Unknown
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
Description . . . . . . . . . . . : Intel(R) PRO/100 VE Network Connecti
on
Physical Address. . . . . . . . . : 0F-13-20-AA-47-8A
Dhcp Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 192.168.1.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
DHCP Server . . . . . . . . . . . : 192.168.1.1
DNS Servers . . . . . . . . . . . : 192.168.1.1
Lease Obtained. . . . . . . . . . : 2010年4月20日 8:12:48
Lease Expires . . . . . . . . . . : 2010年4月21日 8:12:48
现在是DNS Servers是默认网关的值了,也就是没有正确获得外部的DNS的值,现在我想在检测到DNS Servers值等于默认网关值时设DNS1为空跳出循环.我的不成功代码如下,- @echo off
- call :ready
- :0
- ::cls
- echo\
- echo 连接名称..: %NIC%
- echo 当前IP....: %ip%
- echo 网关......: %gateway%
- echo 当前DNS...: %dns1%
- echo 备用DNS...: %dns2%
- pause>nul
- :1
- ::测试网络代码........
- ping -n 2 %ip% >nul&&echo 通||echo 不通
- pause>nul
-
- :ready
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 (if /i dns1==gateway set dns1= &goto:eof)else (set dns2=%%a.%%b.%%c&goto:eof)
- if /i "%%a %%b"=="Ethernet adapter" set NIC=%%c&call set NIC=%%NIC:~0,-2%%
- if /i "%%a %%b"=="IP Address" set "ip=%%c"
- if /i "%%a %%b"=="Default Gateway" set "gateway=%%c"
- if /i "%%a %%b"=="DNS Servers" set "dns1=%%c")
- goto :eof
复制代码
窗口显示:
连接名称..:
当前IP....:
网关......:
当前DNS...:
备用DNS...: ..
可能又是变量延迟什么的没用好吧!set local .........,变量加!!都试过了,变量加%也试过了,
这个for就是弄不明白.再烦劳各位大侠给调一下!
[ 本帖最后由 antony521 于 2010-4-20 13:05 编辑 ]
作者: hanyeguxing 时间: 2010-4-20 15:26
- @echo off&setlocal enabledelayedexpansion
- call :ready
- echo.中间部分省略
- :ready
- for /F "tokens=1,2* delims=:. " %%a in ('ipconfig/all') do (
- if defined dns1 set dns2=!dns1!&if "!dns1!"=="!gateway!" set "dns1="&goto:eof
- if /i "%%a %%b"=="Ethernet adapter" set NIC=%%c&call set NIC=%%NIC:~0,-2%%
- if /i "%%a %%b"=="IP Address" set "ip=%%c"
- if /i "%%a %%b"=="Default Gateway" set "gateway=%%c"
- if /i "%%a %%b"=="DNS Servers" set "dns1=%%c")
- goto :eof
复制代码
[ 本帖最后由 hanyeguxing 于 2010-4-20 15:28 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |