中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 关于FOR取值的一个疑问 上一主题 | 下一主题
THENEWLIFE
初级用户




积分 78
发帖 64
注册 2008-8-29
状态 离线
『楼 主』:  关于FOR取值的一个疑问

IPD这个变量是192.168.0.8
for %%a in (%ipd:.= %) do set IPD4=%%a
这句为什么会是把8提出来呢,因该是显示 192 168 0 8 才对啊
难道是因为IPD后面加了个4的原因所以才取第4位吗
个人感觉因该像这个例子样
for %a in (aa.txt bb.txt cc.txt) do @echo %a
输出
aa.txt
bb.txt
cc.txt
我又回去看了几遍关于FOR的介绍,还是不明白,还请大大详细说明下

2009-4-4 10:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wjcing
初级用户





积分 71
发帖 59
注册 2007-12-27
状态 离线
『第 2 楼』:  

@echo off
setlocal enabledelayedexpansion
set ipd=192.168.0.8
set /a _T=0
for %%a in (%ipd:.= %) do (
set /a _T+=1
set IPD!_T!=%%a
)
echo !IPD1! !IPD2! !IPD3! !IPD4!
ENDLOCAL
pause

   此帖被 +1 点积分    点击查看详情   
评分人:【 THENEWLIFE 分数: +1  时间:2009-4-4 23:33


2009-4-4 16:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 3 楼』:  

因为for 的作用,后面的set ipd4=%%a执行了4次,前面的3次是临时的,
最后就得到了第4次的结果了。

   此帖被 +2 点积分    点击查看详情   
评分人:【 THENEWLIFE 分数: +2  时间:2009-4-4 23:33




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-4 20:25
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
Pierre
初级用户





积分 30
发帖 19
注册 2009-4-4
状态 离线
『第 4 楼』:  


F:\>for %a in (%ipd:.= %) do @echo %a
192
168
0
8
当set的时候,其实是进行了4次set,最后一次的值留了下来

   此帖被 +1 点积分    点击查看详情   
评分人:【 THENEWLIFE 分数: +1  时间:2009-4-4 23:33


2009-4-4 22:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
THENEWLIFE
初级用户




积分 78
发帖 64
注册 2008-8-29
状态 离线
『第 5 楼』:  

楼的方法是通过SET /A 递增的效果让我看的更清楚吧,
@echo off
setlocal enabledelayedexpansion
set ipd=192.168.0.8
set /a _T=0
for %%a in (%ipd:.= %) do (
set /a _T+=1
set IPD!_T!=%%a
)
echo !IPD1! !IPD2! !IPD3! !IPD4!
ENDLOCAL
pause
它能一个一个显示出来是因为开启了变量延迟吗

2009-4-4 23:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wjcing
初级用户





积分 71
发帖 59
注册 2007-12-27
状态 离线
『第 6 楼』:  

@echo off
setlocal enabledelayedexpansion
set ipd=192.168.0.8
set /a _T=0
for %%a in (%ipd:.= %) do (
set /a _T+=1
set IPD!_T!=%%a
call echo 变量延迟:%%IPD!_T!%%
echo 变量未延迟:%_T%
)
echo %IPD1% %IPD2% %IPD3% %IPD4%
ENDLOCAL
pause

不是...如果在for体内引用才用变量延迟..

2009-4-5 01:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
THENEWLIFE
初级用户




积分 78
发帖 64
注册 2008-8-29
状态 离线
『第 7 楼』:  

for %%a in (%ipd:.= %) do set IPD4=%%a
for %%a in (%ipd:.= %)如果不加后面的就因该会产生4个变量 %%a %%b %%c %%d 他们分别是%%a=192 %%b=168 %%c=0  %%d=8
所以你直接定义IPD4=%%a 就可以省略了这句“set /a _T+=1
set IPD!_T!=%%a 是吗
不知道我理解的对不对

2009-4-5 12:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 8 楼』:  Re 7楼

你理解的不对
在回头看看别人的回复吧



2009-4-6 02:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
balinger
中级用户




积分 356
发帖 115
注册 2004-7-27
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by THENEWLIFE at 2009-4-5 12:25 PM:
for %%a in (%ipd:.= %) do set IPD4=%%a
for %%a in (%ipd:.= %)如果不加后面的就因该会产生4个变量 %%a %%b %%c %%d 他们分别是%%a=192 %%b=168 %%c=0  %%d=8
所以你直接定义IPD ...

@echo off
set ipd=192.168.0.8
for /f "usebackq tokens=1-4" %%a in ('%ipd:.= %') do (
echo %%a
echo %%b
echo %%c
echo %%d)
pause
exit


@echo off
set ipd=192.168.0.8
for /f "tokens=1-4" %%a in ('echo %ipd:.= %') do (
echo %%a
echo %%b
echo %%c
echo %%d)
pause
exit

2009-4-6 03:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
THENEWLIFE
初级用户




积分 78
发帖 64
注册 2008-8-29
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by netbenton at 2009-4-4 08:25 PM:
因为for 的作用,后面的set ipd4=%%a执行了4次,前面的3次是临时的,
最后就得到了第4次的结果了。

又回去看了几遍,是不是这个意思:
因为FOR每次都以一个变量来定义IPD4,比如第一次是用192.第二次就变成了168,所以就这样替换下去就变成了8 ,
这样理解因该是对的吧

2009-4-6 08:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
balinger
中级用户




积分 356
发帖 115
注册 2004-7-27
状态 离线
『第 11 楼』:  

楼主理解对了
FOR循环执行do后(...)内的操作,循环几次,看in后( )内有几个可替换的参数
每次do操作,变量都取一个参数值
for %%a in (192 168 0 8) do (...)  表示有4个参数,默认以空格分割参数,变量%%a
第一次用第一个参数,赋值与变量,%%a=192
第二次用第二个参数,赋值与变量,%%a=168
......

当然,可替换参数的来源还有其它情形

2009-4-6 09:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
THENEWLIFE
初级用户




积分 78
发帖 64
注册 2008-8-29
状态 离线
『第 12 楼』:  

谢谢大家的指导

2009-4-6 09:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: