中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-04 18:31
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 改IP的批处理有几点不懂 查看 817 回复 4
楼 主 改IP的批处理有几点不懂 发表于 2007-06-01 08:47 ·  中国 河南 焦作 联通
初级用户
积分 27
发帖 9
注册 2007-05-29 17:30
19年会员
UID 89675
性别 女
状态 离线
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 发表于 2007-06-01 12:34 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
3 发表于 2007-06-01 14:39 ·  中国 上海 电信
初级用户
★★
积分 180
发帖 84
注册 2006-09-07 00:33
19年会员
UID 61995
状态 离线
^是转义字符,特殊需要转义,比如|是DOS里的管道命令,但是要输出|字符时,需要转义,用^|来表示

!mac:~0,-1!

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

具体可以搜索延迟变量和查看set /?命令
4 发表于 2007-06-01 19:57 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
//tokens=1-3是什么意思?
取第一列、第二列、第三列

//%%K和%%L是哪里来的?
从for循环的第一行可以看出%%j代表第一列,所以%%k代表第二列,%%l代表第三列,%%m代表第四列,依此类推。
5 发表于 2007-06-01 20:00 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
//delims==用一个=就够了,为什么用两个?
也许是作者笔误,也许在MAC.INI文件中确实是以=|作为列分隔符的。打开MAC.INI文件一看便知。
论坛跳转: