![]() |
中国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: 这个太长了吧,上面(2楼)只需三行就完成了,而且效果跟这完全相同。 |
|
| 第5楼 arding | 发表于 2006-05-29 10:22 |
| 初级用户 发帖 38 积分 90 | |
|
注意!这部分不对:
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 不应该是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: 使用多个标号可以达到意想不到的效果。至于标号格式与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 |