中国DOS联盟论坛

中国DOS联盟

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

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

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




积分 108
发帖 35
注册 2007-4-12
来自 河北廊坊
状态 离线
『楼 主』:  关于set的一个问题

在帮助里有这么一个例子:
set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo If you see this, it worked
)
它什么也不会显示,帮助里的解释是这样说的:

不会显示消息,因为在读到第一个 IF 语句时,BOTH IF 语句中
的 %VAR% 会被代替;原因是: 它包含 IF 的文体,IF 是一个
复合语句。所以,复合语句中的 IF 实际上是在比较 "before" 和
"after",这两者永远不会相等。
小弟看不太明白是什么意思,高手们再给解释一下好吗?

2007-4-14 00:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 2 楼』:  

楼主可以搜下以前一位朋友发的延迟变量的新手教程的帖子,就能明白了
大致意思就是因为if for之类似的语句在延迟变量开关打开之前只要执行的话,对变量的值的变更不作判断(我自己是这样理解的)这里的
if "%VAR%" == "before" (
    set VAR=after(不作判断)
    if "%VAR%" == "after" @echo If you see this, it worked(所以这里的var值还是before,结果就是什么都不会显示)
)
最好自己看下那个帖子我只是按自己理解来说

2007-4-14 02:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 3 楼』:  

我的理解是,没有开启变量延迟时,在执行每一个语句时(复合的当做一个),会先将里面的变量进行替换再执行那个语句,直到该语句结束才会再次更新那个变量,在帮助中的例子里:在执行if这个复合语句时,%VAR%先全部被替换为before再执行,即系统执行的语句是这个:
if "before" == "before" (
    set VAR=after
    if "before" == "after" @echo If you see this, it worked
)

于是就不显示了,如果学过C语言,你就会发现它和预处理命令#define很相似了

2007-4-14 03:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: