中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请大家指点一下,这个批处理那里错了
« [1] [2] »
作者:
标题: 请大家指点一下,这个批处理那里错了 上一主题 | 下一主题
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 3 楼』:  

可以这样改!
@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



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
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
来自 四川南充
状态 离线
『第 13 楼』:  

7楼的有问题!如果输入的是dog pig 也外的它也要跳到pig行!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-5-29 14:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 14 楼』:  

如果是12楼的话,输入的字符没有对应的行号会出错的!



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-5-29 14:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 15 楼』:  

另外如果%a%="dog" or "gou" or "狗"都要跳到dog的话可以用下面的;
for %%1 in (dog gou 狗) do if %a%#==%%1 goto dog



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-5-29 14:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: