中国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命令 上一主题 | 下一主题
yinyuan
初级用户





积分 50
发帖 22
注册 2006-5-14
状态 离线
『楼 主』:  请教一个批处理 if 和 set命令

这几天想学习一下批处理的几个常用命令,在下面的批处理中有一条命令不太明白,请指导一下:

@Echo off
COLOR 1F
Title 选择操作
:Start
CLS
Echo.
Echo          1. 设置E.F分区的PE文件为系统隐藏属性      
Echo        2. xp 、hotmail 密码管理                    
Echo        0. 退出                              
Echo.
Set Choice=
Set /P Choice=      请选择要操作的序号 , 然后按回车:
If %Choice%Choice==Choice Goto Start    这一句是不是多余的?发现去掉后没什么影响,这一句到底是什么意思?
If Not '%Choice%'=='' SET Choice=%Choice:~0,1%
If /I '%Choice%'=='1' GOTO 1
If /I '%Choice%'=='2' GOTO 2
If /I '%Choice%'=='0' EXIT
Goto Start

:1
Echo.
........................

[ Last edited by yinyuan on 2007-11-25 at 12:01 PM ]

2007-11-23 11:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
upsco
初级用户





积分 67
发帖 32
注册 2007-11-19
状态 离线
『第 2 楼』:  

If %Choice%Choice==Choice Goto Start  这句是判断变量Choice的值是否为空,既判断用户是否有输入

2007-11-23 11:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yinyuan
初级用户





积分 50
发帖 22
注册 2006-5-14
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by upsco at 2007-11-23 11:16:
If %Choice%Choice==Choice Goto Start  这句是判断变量Choice的值是否为空,既判断用户是否有输入

但去掉这一条,在没有输入的情况下按回车,结果是一样的。看不出有什么不同呀。


能不能解释一下,有这条命令和没有这条命令的具体区别?

2007-11-23 11:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 4 楼』:  

@Echo off
COLOR 1F
Title 选择操作
:Start
CLS
Echo.
Echo          1. 设置E.F分区的PE文件为系统隐藏属性      
Echo        2. xp 、hotmail 密码管理                    
Echo        0. 退出                              
Echo.
Set Choice=
Set /P Choice=      请选择要操作的序号 , 然后按回车:
If %Choice%Choice==Choice Goto Start    这一句是不是多余的?发现去掉后没什么影响,这一句到底是什么意思?
If Not '%Choice%'=='' SET Choice=%Choice:~0,1%
If /I '%Choice%'=='1' GOTO 1
If /I '%Choice%'=='2' GOTO 2
If /I '%Choice%'=='0' EXIT
Goto Start

有了蓝色部分,红色部分可以说是多余的



第一高手    第二高手

2007-11-23 11:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yinyuan
初级用户





积分 50
发帖 22
注册 2006-5-14
状态 离线
『第 5 楼』:  

多谢楼上二位老师,终于明白了

2007-11-23 11:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yinyuan
初级用户





积分 50
发帖 22
注册 2006-5-14
状态 离线
『第 6 楼』:  

还有一点不明白,我在这个批处理里输入10 回车,就会执行序号1的内容,但我输的10在这个批处理里没有这个序号呀,怎么解决。

2007-11-23 11:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 7 楼』:  

单引号 改成 双引号
试一试~~
"" 是字符串完全匹配的意思

2007-11-23 22:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yinyuan
初级用户





积分 50
发帖 22
注册 2006-5-14
状态 离线
『第 8 楼』:  

改成双引号后,所有跳转都无效了

2007-11-24 11:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 9 楼』:  

楼主没看到版务记录吗?谁想回了贴再被版主删除?
If Not '%Choice%'=='' SET Choice=%Choice:~0,1%
如果Choice变量不是空的,设置Choice变量取原变量的前1个字节。
也就是说Choice变量只能是1个字节,即使输入100取原变量的前1个字节也是1。



第一高手    第二高手

2007-11-24 12:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hxwxyz
中级用户




积分 245
发帖 123
注册 2007-6-8
状态 离线
『第 10 楼』:  

学习了

2007-11-24 13:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yinyuan
初级用户





积分 50
发帖 22
注册 2006-5-14
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by fastslz at 2007-11-24 12:37:
楼主没看到版务记录吗?谁想回了贴再被版主删除?
If Not '%Choice%'=='' SET Choice=%Choice:~0,1%
如果Choice变量不是空的,设置Choice变量取原变量的前1个字节 ...

彻底明白了,多谢楼上几位!

才注意到版务记录,马上改

2007-11-24 13:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: