中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-06 13:53
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教一个批处理 if 和 set命令 查看 938 回复 10
楼 主 请教一个批处理 if 和 set命令 发表于 2007-11-23 11:02 ·  中国 河南 漯河 联通
初级用户
积分 50
发帖 22
注册 2006-05-14 13:53
20年会员
UID 55514
状态 离线
这几天想学习一下批处理的几个常用命令,在下面的批处理中有一条命令不太明白,请指导一下:

@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 ]
2 发表于 2007-11-23 11:16 ·  中国 湖南 长沙 电信
初级用户
积分 67
发帖 32
注册 2007-11-19 12:34
18年会员
UID 103118
性别 男
状态 离线
If %Choice%Choice==Choice Goto Start 这句是判断变量Choice的值是否为空,既判断用户是否有输入
3 发表于 2007-11-23 11:24 ·  中国 河南 漯河 联通
初级用户
积分 50
发帖 22
注册 2006-05-14 13:53
20年会员
UID 55514
状态 离线
Originally posted by upsco at 2007-11-23 11:16:
If %Choice%Choice==Choice Goto Start 这句是判断变量Choice的值是否为空,既判断用户是否有输入



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


能不能解释一下,有这条命令和没有这条命令的具体区别?
4 发表于 2007-11-23 11:36 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
@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

有了蓝色部分,红色部分可以说是多余的
第一高手 第二高手

5 发表于 2007-11-23 11:41 ·  中国 河南 漯河 联通
初级用户
积分 50
发帖 22
注册 2006-05-14 13:53
20年会员
UID 55514
状态 离线
多谢楼上二位老师,终于明白了
6 发表于 2007-11-23 11:53 ·  中国 河南 漯河 联通
初级用户
积分 50
发帖 22
注册 2006-05-14 13:53
20年会员
UID 55514
状态 离线
还有一点不明白,我在这个批处理里输入10 回车,就会执行序号1的内容,但我输的10在这个批处理里没有这个序号呀,怎么解决。
7 发表于 2007-11-23 22:23 ·  中国 北京 中国科学院研究生院玉泉四公寓
银牌会员
★★★
积分 1,187
发帖 555
注册 2006-12-21 07:35
19年会员
UID 74129
性别 男
状态 离线
单引号 改成 双引号
试一试~~
"" 是字符串完全匹配的意思
8 发表于 2007-11-24 11:54 ·  中国 河南 漯河 联通
初级用户
积分 50
发帖 22
注册 2006-05-14 13:53
20年会员
UID 55514
状态 离线
改成双引号后,所有跳转都无效了
9 发表于 2007-11-24 12:37 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
楼主没看到版务记录吗?谁想回了贴再被版主删除?
If Not '%Choice%'=='' SET Choice=%Choice:~0,1%
如果Choice变量不是空的,设置Choice变量取原变量的前1个字节。
也就是说Choice变量只能是1个字节,即使输入100取原变量的前1个字节也是1。
第一高手 第二高手

10 发表于 2007-11-24 13:05 ·  中国 江西 南昌 电信
中级用户
★★
积分 245
发帖 123
注册 2007-06-08 09:04
19年会员
UID 90636
性别 女
状态 离线
学习了
11 发表于 2007-11-24 13:24 ·  中国 河南 漯河 联通
初级用户
积分 50
发帖 22
注册 2006-05-14 13:53
20年会员
UID 55514
状态 离线
Originally posted by fastslz at 2007-11-24 12:37:
楼主没看到版务记录吗?谁想回了贴再被版主删除?
If Not '%Choice%'=='' SET Choice=%Choice:~0,1%
如果Choice变量不是空的,设置Choice变量取原变量的前1个字节 ...



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

才注意到版务记录,马上改
论坛跳转: