中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-23 16:42
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行
DOS批处理 & 脚本技术(批处理室) » 请大家指点一下,这个批处理那里错了
可打印版本  2,733 / 19
第1楼 fan927 发表于 2006-05-29 02:25
初级用户 发帖 31 积分 82
请大家指点一下,这个批处理那里错了
我希望输入相应的名字,出现相应的结果,可是这个批处理是错的,应该怎么写,多谢了.

@echo off
set /p a=请输入你的名字:
if "%a%"=="dog" goto dog
:dog
echo 这是一只狗
goto end

if "%a%"=="pig" goto pig
:pig
echo 这是一只猪
goto end

if "%a%"=="" goto kong
:kong
echo 您没有输入名字,请重新输入
goto end

:end
pause
第2楼 Wengier 发表于 2006-05-29 02:53
系统支持 发帖 10,521 积分 27,736
上面的标号使用方法不对。试试下面这个吧:

@echo off
set /p a=请输入你的名字:
if "%a%"=="dog" (echo 这是一只狗) else if "%a%"=="pig" (echo 这是一只猪) else echo 您没有输入名字,请重新输入
第3楼 不得不爱 发表于 2006-05-29 09:22
超级版主 发帖 2,044 积分 5,310 来自 四川南充
可以这样改!
@echo off
set /p a=请输入你的名字:
if "%a%"=="dog" goto dog
if "%a%"=="pig" goto pig
if "%a%"=="" goto kong
:dog
echo 这是一只狗
goto end

:pig
echo 这是一只猪
goto end

:kong
echo 您没有输入名字,请重新输入
goto end

:end
pause
第4楼 Wengier 发表于 2006-05-29 09:36
系统支持 发帖 10,521 积分 27,736
Originally posted by qwe1234567 at 2006-5-29 09:22 AM:
可以这样改!
@echo off
set /p a=请输入你的名字:
if "%a%"=="dog" goto dog
if "%a%"=="pig" goto pig
if "%a%"=="" goto kon ...


这个太长了吧,上面(2楼)只需三行就完成了,而且效果跟这完全相同。
第5楼 arding 发表于 2006-05-29 10:22
初级用户 发帖 38 积分 90
注意!这部分不对:

if "%a%"=="dog" goto dog
:dog
echo 这是一只狗
goto end

if "%a%"=="dog" goto dog,
如果输入是dog当然进入下一句:dog,但是如果输入不是dog,仍然会继续到 if 语句的下一句。所以会错了。
像二楼那样,与 if 在一行,而且加上 ( ) 就如你所愿了。
第6楼 3742668 发表于 2006-05-29 12:49
荣誉版主 发帖 718 积分 2,013
两个逻辑错误:
1.3个if语句应该放在一起,而且在if语句后面应该有跳转语句避免执行下面的dog,pig以及kong标号段,楼上几位的方法可以参考。
2.kong标号结束部分跳转不正确。
if "%a%"=="" goto kong
:kong
echo 您没有输入名字,请重新输入
goto end

不应该是goto end,那样的话就不会是重新输入而应该是直接退出了。正确的做法应该是在set /p前面再加上一个标号,此处跳转到set /p前面。当然,某些部分也要做相映的修改。
第7楼 fan927 发表于 2006-05-29 13:12
初级用户 发帖 31 积分 82
非常感谢回复小弟的大侠们,问题已经解决,主要是else的应用,我现在修改了一下,代码如下:
@echo off
:set
set /p a=请输入你的名字:
if "%a%"=="dog" goto dog else goto pig
if "%a%"=="pig" goto pig else goto kong
if "%a%"=="" goto kong
:dog
echo 这是一只狗
goto end

:pig
echo 这是一只猪
goto end

:kong
echo 您没有输入名字,请重新输入
goto set

:end
pause

可以正常完成我的要求.再次感谢!
第8楼 3742668 发表于 2006-05-29 13:44
荣誉版主 发帖 718 积分 2,013
Well,问题似乎没有你想象的那么简单,问题的根本并不在于else语句,运行你的脚本,随便输入一个字符(即不在判断内的字符,例如c)就可以看出问题来了。另外你的结构似乎也有点小问题,判断是否为空的模块似乎可以取消,改为第三个if语句直接跳转应该更好。在你的代码上简单做做修改:

期待你能把它完善精简一下。
第9楼 不得不爱 发表于 2006-05-29 13:47
超级版主 发帖 2,044 积分 5,310 来自 四川南充
下面的比较短!
@echo off
set a=
:a
set /p a=请输入你的名字:
if %a%#==dog# (echo 这是一只狗) else if %a%#==pig# (echo 这是一只猪 ) else if %a%#==# (echo 您没有输入名字,请重新输入 & goto a) else (echo 输入错误,按任意键退出...)
pause

[ Last edited by qwe1234567 on 2006-5-29 at 14:16 ]
第10楼 fan927 发表于 2006-05-29 13:52
初级用户 发帖 31 积分 82
是啊,我也发现输入错误字符这个问题了,多谢!
另外请问,我如果%a%="dog" or "gou" or "狗"应该怎么表示?是不是要 if 3次?
if "%a%"=="dog" goto dog else goto pig
if "%a%"=="gou" goto dog else goto pig
if "%a%"=="狗" goto dog else goto pig
3742668 版主
劳您费神了!
第11楼 fan927 发表于 2006-05-29 13:54
初级用户 发帖 31 积分 82
多谢qwe1234567版主 ,不过用我的复杂一点的格式我觉得比较习惯.呵呵可能我是菜鸟的关系吧.
第12楼 3742668 发表于 2006-05-29 14:26
荣誉版主 发帖 718 积分 2,013
Originally posted by fan927 at 2006-5-29 13:52:
是啊,我也发现输入错误字符这个问题了,多谢!
另外请问,我如果%a%="dog" or "gou" or "狗"应该怎么表示?是不是要 if 3次?
if "%a%&q ...



使用多个标号可以达到意想不到的效果。至于标号格式与else格式,可以酌情考虑使用,各有各的好。
第13楼 不得不爱 发表于 2006-05-29 14:37
超级版主 发帖 2,044 积分 5,310 来自 四川南充
7楼的有问题!如果输入的是dog pig 也外的它也要跳到pig行!
第14楼 不得不爱 发表于 2006-05-29 14:42
超级版主 发帖 2,044 积分 5,310 来自 四川南充
如果是12楼的话,输入的字符没有对应的行号会出错的!
第15楼 不得不爱 发表于 2006-05-29 14:53
超级版主 发帖 2,044 积分 5,310 来自 四川南充
另外如果%a%="dog" or "gou" or "狗"都要跳到dog的话可以用下面的;
for %%1 in (dog gou 狗) do if %a%#==%%1 goto dog
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023