![Board logo](images/default/logo.gif)
标题: [其他] [已解决]批处理显示IP配置的代码中有一处语法看不懂 [打印本页]
作者: januapr 时间: 2009-7-31 06:47 标题: [已解决]批处理显示IP配置的代码中有一处语法看不懂
下面是一个显示IP配置的批处,
在百度上搜了很久都没有解决,
诚心求助达人解释:if not "!%~2!" == "" set "%~2=%%i"语句中"!%~2!" 是什么意思?- @echo off
- ::调用格式:
- call :select "ip address" "ip"
- call :select "Physical Address" "mac"
- call :select "Default Gateway" "gateway"
- call :select "DNS Servers" "dns"
- call :select "Description" "netcard"
- :: 演示效果
- echo IP地址:%ip%
- echo MAC地址:%mac%
- echo DNS服务器:%dns%
- echo 网关:%gateway%
- echo NETCARD:%netcard%
- pause>nul
- goto :eof
- ::**************************************************************
- :: 解析ipconfig命令输出通用函数
- ::**************************************************************
- :select
- for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| findstr /i /c:%1') do if not "!%~2!" == "" set "%~2=%%i"
- goto :eof
复制代码
[ 本帖最后由 januapr 于 2009-7-31 23:32 编辑 ]
作者: Lumiere 时间: 2009-7-31 09:14 标题: 回复 1楼 的帖子
%1 这样百分号加数字的形式都是批处理参数。比如你代码中的这一行:call :select "ip address" "ip",%1就代表"ip address",%2代表"ip",通过call调用select传递给select后的代码段。%~2表示去掉第二个参数字符串中所有的百分号。
作者: inittab 时间: 2009-7-31 10:05
call :select "ip address" "ip"
调用select 并把 "ip address" "ip" 两个值传递给变量%1 ,%2(加引号为了支持带空格字串)
if not "!%~2!" == "" set "%~2=%%i"
这句是有问题的,但它不会出错,分析如下
%2值: "ip"
%~2 值: ip (~作用是去掉双引号,楼上的有错)
"!%~2!" 值: "!ip!" (由于没有启用延迟变量,所以if not "!%~2!" == "" 就是 not "!ip!"=="" 即not not 负负得正它是永远成立的。如果启用延迟变量。ip 又没有被定义,!ip!的值为空。即not yes 。永远不成立,程序会得不到想要的结果。
所以if not "!%~2!" == ""这句完全多余。可以删除。
另 太多的call 导致效率严重低下。最好用for +if 完现相同的功能.
[ 本帖最后由 inittab 于 2009-7-31 10:08 编辑 ]
作者: tireless 时间: 2009-7-31 11:16 标题: 回复 2楼 的帖子
%~2 只删除首尾的引号,首字符不是引号不进行处理。
例:
a" → 不删
"a"b → a"b
""ab"" → "ab"
[ 本帖最后由 tireless 于 2009-7-31 13:32 编辑 ]
作者: Lumiere 时间: 2009-7-31 12:29
呵呵,我有俩错误,第一个是“所有”这个限定词,第二个纯属笔误。
作者: Lumiere 时间: 2009-7-31 12:29 标题: 回复 4楼 的帖子
没看明白勒,第二个和第三个怎么来着?
作者: januapr 时间: 2009-7-31 23:33
在此感谢大家的解答!
祝愿我们的论坛越来越火红!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |