中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-04 19:39
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 改IP的批处理有几点不懂
可打印版本  818 / 4
第1楼 jiecy 发表于 2007-06-01 08:47
初级用户 发帖 9 积分 27
改IP的批处理有几点不懂
for /f "tokens=12 delims= " %%i in ('ipconfig /all^|find /i "Physical Address"') do (
set mac=%%i
set mac=!mac:~0,-1!
)

第一行的 ipconfig /all^ 后边跟个 ^ 是什么意思?
第二行已经得到了MAC地址,为什么第三行要写个 !mac:~0,-1 ,是不是得到的MAC最后边有个空格,把那个空格去掉?


for /f "tokens=1-3 delims==|" %%j in (MAC.INI) do (
set mac_=%%j
set ip_=%%k
set sm_=%%l
if !mac! equ !mac_! (
call :set_ !mac_! !ip_! !sm_!
set /a no_+=1
)
)
tokens=1-3是什么意思?
delims==用一个=就够了,为什么用两个?
MAC.INI为什么不用空格分隔?这样岂不简单?
%%K和%%L是哪里来的?
!MAC!EQV !MAC_!是什么意思?
CALL :set_ !mac_! !ip_! !sm_! 什么意思?

[ Last edited by jiecy on 2007-6-1 at 09:23 AM ]
第2楼 lxmxn 发表于 2007-06-01 12:34
版主 发帖 4,938 积分 11,386
第3楼 ttyp 发表于 2007-06-01 14:39
初级用户 发帖 84 积分 180
^是转义字符,特殊需要转义,比如|是DOS里的管道命令,但是要输出|字符时,需要转义,用^|来表示

!mac:~0,-1!

两个!扩起来的是在使用延迟变量时的定义,:~start,end,是字符串操作,此句表示截取mac的从第1个字符到最后一个字符

具体可以搜索延迟变量和查看set /?命令
第4楼 HAT 发表于 2007-06-01 19:57
版主 发帖 5,017 积分 9,023
//tokens=1-3是什么意思?
取第一列、第二列、第三列

//%%K和%%L是哪里来的?
从for循环的第一行可以看出%%j代表第一列,所以%%k代表第二列,%%l代表第三列,%%m代表第四列,依此类推。
第5楼 HAT 发表于 2007-06-01 20:00
版主 发帖 5,017 积分 9,023
//delims==用一个=就够了,为什么用两个?
也许是作者笔误,也许在MAC.INI文件中确实是以=|作为列分隔符的。打开MAC.INI文件一看便知。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023