[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决]批处理显示IP配置的代码中有一处语法看不懂

下面是一个显示IP配置的批处,
在百度上搜了很久都没有解决,
诚心求助达人解释:if not "!%~2!" == "" set "%~2=%%i"语句中"!%~2!" 是什么意思?
  1. @echo off
  2. ::调用格式:
  3. call :select "ip address" "ip"
  4. call :select "Physical Address" "mac"
  5. call :select "Default Gateway" "gateway"
  6. call :select "DNS Servers" "dns"
  7. call :select "Description" "netcard"
  8. :: 演示效果
  9. echo IP地址:%ip%
  10. echo MAC地址:%mac%
  11. echo DNS服务器:%dns%
  12. echo 网关:%gateway%
  13. echo NETCARD:%netcard%
  14. pause>nul
  15. goto :eof
  16. ::**************************************************************
  17. ::              解析ipconfig命令输出通用函数
  18. ::**************************************************************
  19. :select
  20.     for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| findstr /i /c:%1') do if not "!%~2!" == "" set "%~2=%%i"
  21. goto :eof
复制代码

[ 本帖最后由 januapr 于 2009-7-31 23:32 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

回复 1楼 的帖子

%1 这样百分号加数字的形式都是批处理参数。比如你代码中的这一行:call :select "ip address" "ip",%1就代表"ip address",%2代表"ip",通过call调用select传递给select后的代码段。%~2表示去掉第二个参数字符串中所有的百分号。
1

评分人数

Still with wax

TOP

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 编辑 ]
1

评分人数

TOP

回复 2楼 的帖子

%~2 只删除首尾的引号,首字符不是引号不进行处理。

例:

  a"           →    不删
  "a"b        →    a"b
  ""ab""      →    "ab"

[ 本帖最后由 tireless 于 2009-7-31 13:32 编辑 ]
1

评分人数

    • inittab: 学习~~还真不知有这细节。PB + 2

TOP

呵呵,我有俩错误,第一个是“所有”这个限定词,第二个纯属笔误。
Still with wax

TOP

回复 4楼 的帖子

没看明白勒,第二个和第三个怎么来着?
Still with wax

TOP

在此感谢大家的解答!
祝愿我们的论坛越来越火红!!

TOP

返回列表