|
fan927
初级用户
积分 82
发帖 31
注册 2006-5-23
状态 离线
|
『楼 主』:
请大家指点一下,这个批处理那里错了
我希望输入相应的名字,出现相应的结果,可是这个批处理是错的,应该怎么写,多谢了.
@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
|
|
2006-5-29 02:25 |
|
|
Wengier
系统支持
“新DOS时代”站长
积分 27734
发帖 10521
注册 2002-10-9
状态 离线
|
『第
2 楼』:
上面的标号使用方法不对。试试下面这个吧:
@echo off
set /p a=请输入你的名字:
if "%a%"=="dog" (echo 这是一只狗) else if "%a%"=="pig" (echo 这是一只猪) else echo 您没有输入名字,请重新输入
|
Wengier - 新DOS时代
欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/
E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)
|
|
2006-5-29 02:53 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-5-29 09:22 |
|
|
Wengier
系统支持
“新DOS时代”站长
积分 27734
发帖 10521
注册 2002-10-9
状态 离线
|
『第
4 楼』:
Quote: | 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楼)只需三行就完成了,而且效果跟这完全相同。
|
Wengier - 新DOS时代
欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/
E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)
|
|
2006-5-29 09:36 |
|
|
arding
初级用户
积分 90
发帖 38
注册 2006-1-6
状态 离线
|
『第
5 楼』:
注意!这部分不对:
Quote: | if "%a%"=="dog" goto dog
:dog
echo 这是一只狗
goto end |
|
if "%a%"=="dog" goto dog,
如果输入是dog当然进入下一句:dog,但是如果输入不是dog,仍然会继续到 if 语句的下一句。所以会错了。
像二楼那样,与 if 在一行,而且加上 ( ) 就如你所愿了。
|
|
2006-5-29 10:22 |
|
|
3742668
荣誉版主
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第
6 楼』:
两个逻辑错误:
1.3个if语句应该放在一起,而且在if语句后面应该有跳转语句避免执行下面的dog,pig以及kong标号段,楼上几位的方法可以参考。
2.kong标号结束部分跳转不正确。
Quote: | if "%a%"=="" goto kong
:kong
echo 您没有输入名字,请重新输入
goto end |
|
不应该是goto end,那样的话就不会是重新输入而应该是直接退出了。正确的做法应该是在set /p前面再加上一个标号,此处跳转到set /p前面。当然,某些部分也要做相映的修改。
|
|
2006-5-29 12:49 |
|
|
fan927
初级用户
积分 82
发帖 31
注册 2006-5-23
状态 离线
|
『第
7 楼』:
非常感谢回复小弟的大侠们,问题已经解决,主要是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
可以正常完成我的要求.再次感谢!
|
|
2006-5-29 13:12 |
|
|
3742668
荣誉版主
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第
8 楼』:
Well,问题似乎没有你想象的那么简单,问题的根本并不在于else语句,运行你的脚本,随便输入一个字符(即不在判断内的字符,例如c)就可以看出问题来了。另外你的结构似乎也有点小问题,判断是否为空的模块似乎可以取消,改为第三个if语句直接跳转应该更好。在你的代码上简单做做修改:
@echo off
:set
set /p a=请输入你的名字:
if "%a%" == "" echo 您没有输入名字,请重新输入 && goto set
call :%a% 2>nul
goto error
goto end
:dog
echo 这是一只狗
goto end
:pig
echo 这是一只猪
goto end
:error
echo 输入错误,按任意键退出...
pause>nul
exit
:end
按任意键退出...
pause>nul
exit 期待你能把它完善精简一下。
|
|
2006-5-29 13:44 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
『第
9 楼』:
下面的比较短!
@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 ]
|
我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件 |
|
2006-5-29 13:47 |
|
|
fan927
初级用户
积分 82
发帖 31
注册 2006-5-23
状态 离线
|
『第
10 楼』:
是啊,我也发现输入错误字符这个问题了,多谢!
另外请问,我如果%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 版主
劳您费神了!
|
|
2006-5-29 13:52 |
|
|
fan927
初级用户
积分 82
发帖 31
注册 2006-5-23
状态 离线
|
『第
11 楼』:
多谢qwe1234567版主 ,不过用我的复杂一点的格式我觉得比较习惯.呵呵可能我是菜鸟的关系吧.
|
|
2006-5-29 13:54 |
|
|
3742668
荣誉版主
积分 2013
发帖 718
注册 2006-2-18
状态 离线
|
『第
12 楼』:
Quote: | Originally posted by fan927 at 2006-5-29 13:52:
是啊,我也发现输入错误字符这个问题了,多谢!
另外请问,我如果%a%="dog" or "gou" or "狗"应该怎么表示?是不是要 if 3次?
if "%a%&q ... |
|
@echo off
set /p a=输入:
goto %a%
:dog
:狗
echo 狗
pause 使用多个标号可以达到意想不到的效果。至于标号格式与else格式,可以酌情考虑使用,各有各的好。
|
|
2006-5-29 14:26 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-5-29 14:37 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-5-29 14:42 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2006-5-29 14:53 |
|