中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-08 15:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请大家指点一下,这个批处理那里错了 查看 2,351 回复 19
楼 主 请大家指点一下,这个批处理那里错了 发表于 2006-05-29 02:25 ·  中国 广东 深圳 罗湖区 电信
初级用户
积分 82
发帖 31
注册 2006-05-23 00:33
20年会员
UID 55824
状态 离线
我希望输入相应的名字,出现相应的结果,可是这个批处理是错的,应该怎么写,多谢了.

@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 发表于 2006-05-29 02:53 ·  加拿大 Bell
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
23年会员
UID 9
状态 离线
上面的标号使用方法不对。试试下面这个吧:

@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和雨露,谢谢!)

3 发表于 2006-05-29 09:22 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
可以这样改!
@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 发表于 2006-05-29 09:36 ·  加拿大 Bell
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
23年会员
UID 9
状态 离线
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和雨露,谢谢!)

5 发表于 2006-05-29 10:22 ·  中国 四川 成都 教育网
初级用户
积分 90
发帖 38
注册 2006-01-06 18:41
20年会员
UID 48522
状态 离线
注意!这部分不对:

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

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

不应该是goto end,那样的话就不会是重新输入而应该是直接退出了。正确的做法应该是在set /p前面再加上一个标号,此处跳转到set /p前面。当然,某些部分也要做相映的修改。
7 发表于 2006-05-29 13:12 ·  中国 广东 深圳 福田区 电信
初级用户
积分 82
发帖 31
注册 2006-05-23 00:33
20年会员
UID 55824
状态 离线
非常感谢回复小弟的大侠们,问题已经解决,主要是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 发表于 2006-05-29 13:44 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
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

期待你能把它完善精简一下。
9 发表于 2006-05-29 13:47 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
下面的比较短!
@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 发表于 2006-05-29 13:52 ·  中国 广东 深圳 福田区 电信
初级用户
积分 82
发帖 31
注册 2006-05-23 00:33
20年会员
UID 55824
状态 离线
是啊,我也发现输入错误字符这个问题了,多谢!
另外请问,我如果%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 发表于 2006-05-29 13:54 ·  中国 广东 深圳 福田区 电信
初级用户
积分 82
发帖 31
注册 2006-05-23 00:33
20年会员
UID 55824
状态 离线
多谢qwe1234567版主 ,不过用我的复杂一点的格式我觉得比较习惯.呵呵可能我是菜鸟的关系吧.
12 发表于 2006-05-29 14:26 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
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格式,可以酌情考虑使用,各有各的好。
13 发表于 2006-05-29 14:37 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
14 发表于 2006-05-29 14:42 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
15 发表于 2006-05-29 14:53 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
另外如果%a%="dog" or "gou" or "狗"都要跳到dog的话可以用下面的;
for %%1 in (dog gou 狗) do if %a%#==%%1 goto dog
论坛跳转: