中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 02:23
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行
DOS批处理 & 脚本技术(批处理室) » 关于FOR变量问题?望赐教。
可打印版本  1,251 / 6
第1楼 xg911335 发表于 2006-09-17 07:12
初级用户 发帖 50 积分 134
关于FOR变量问题?望赐教。
for /f "tokens=2" %%I in (1.txt) do set IP=%%I
for /f "tokens=3" %%M in (1.txt) do set Mac=%%M
arp -s %ip% %Mac%
1。txt的内容如下:
0 192.168.0.201 00:0A:EB:2F:34:44 lan
1 192.168.0.198 00:14:85:81:BF:E9 lan
2 192.168.0.196 00:14:85:81:B9:F6 lan
3 192.168.0.195 00:14:85:BD:CF:B7 lan

问题来了。为什么只能帮定最后一个呢?
第2楼 mountvol 发表于 2006-09-17 08:06
初级用户 发帖 117 积分 186

在命令行中运行,如果写成批处理把%i和%j改成%%i,%%j
第3楼 namejm 发表于 2006-09-17 10:21
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  如果想对所有的IP都进行绑定的话,可以用下面的代码,楼上的少了些部分:
第4楼 xg911335 发表于 2006-09-18 01:49
初级用户 发帖 50 积分 134
想问一下,我这么写问题出在那里呢?
第5楼 namejm 发表于 2006-09-18 02:25
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by xg911335 at 2006-9-18 01:49:
想问一下,我这么写问题出在那里呢?

  因为for语句是循环语句,它的基本格式是 for %%i in (set) do (command),执行时的特点就是:如果在command部分没有跳转语句的话,它会对set中的内容逐一执行command中的动作,直到set中的内容被执行完之后,才会跳到下一句继续执行。所以,你用for语句读取1.txt的时候,只有等到读取完1.txt的最后一行内容,才会执行下一句,也就是说 %%i 的值为1.txt最后一行内容的时候才执行下一条语句。
第6楼 pengfei 发表于 2006-09-18 02:56
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
看来楼主还是没有理解循环命令的含义哦! 修改代码如下:
for /f "tokens=2" %%i in (1.txt) do (
for /f "tokens=3" %%m in (1.txt) do (
arp -s %%i %%m
)
arp -s %%i %%m 这一句应该放到整个循环中.
而你那段是等for执行完了以后再执行绑定, 这样变量只是最后一个提取到的数值.所以只能绑定最后一个ip啦!

[ Last edited by pengfei on 2006-9-18 at 03:12 ]
第7楼 xg911335 发表于 2006-09-19 03:34
初级用户 发帖 50 积分 134
谢谢个位赐教,我开始明白了.
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023