中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » IF 和 SET 命令的疑惑,还请前辈指教。
作者:
标题: IF 和 SET 命令的疑惑,还请前辈指教。 上一主题 | 下一主题
lzbow
初级用户





积分 23
发帖 13
注册 2009-6-2
状态 离线
『楼 主』:  IF 和 SET 命令的疑惑,还请前辈指教。

第一个:得出的结果 %a%依然是1,为什么不是2呢?
@echo off
set a=1
set /p p= y/n:
if "%p%" == "y" (
set /a a+=1
echo %a%
pause
)
exit

第二个:得出的结果%a%是2。
@echo off
set a=1
set /p p= y/n:
if "%p%" == "y" (
set /a a+=1
)
echo %a%
pause
exit

第三个:得出的结果也是2。
@echo off
set a=1
set /p p= y/n:
set /a a+=1
call :m
pause
)
:m
echo %a%

虽然可以不用if直接算出,但是有时需要到这样。
我非常的疑惑,经过思考,实验,我是这样解释:
if ()括号以外的是一级命令,括号里的命令属于二级命令,当执行二级命令时是从一级命令里取的参数,而二级命令是不能从二级取得参数。这样也就能说明
第一个和第二个里的echo %a% 的不同。
第三个的echo %a% 依然是属于if ()括号外的一级命令,通过CALL调用,只是改变执行的顺序。
不知道我这样的想法是否正确,还请各位前辈指教。
晚辈感谢不尽。



我不是人
2010-12-31 14:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
liion631818
新手上路





积分 13
发帖 11
注册 2010-8-24
来自 上海
状态 离线
『第 2 楼』:  

个人感觉是if语句延迟扩展导致的
你启动延迟扩展:
@echo off
setlocal EnableDelayedExpansion
set a=1
set /p p= y/n:
if "%p%" == "y" (
set /a a+=1
echo !a!
)
pause
这时候会打印2了

   此帖被 +2 点积分    点击查看详情   
评分人:【 lzbow 分数: +2  时间:2011-1-2 13:50


2010-12-31 16:29
查看资料  发送邮件  发短消息 网志  OICQ (554386475)  编辑帖子  回复  引用回复
a130569
新手上路





积分 2
发帖 3
注册 2010-12-17
状态 离线
『第 3 楼』:  

学习了

2011-1-2 15:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 4 楼』:  

楼主看看这个 http://bbs.bathome.net/viewthrea ... 1%BF%2B%D1%D3%B3%D9



批处理之家 http://bbs.bathome.net/forum-5-1.html
2011-1-2 15:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: