中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 09:58
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]批处理选择菜单问题 查看 1,232 回复 13
楼 主 [已结]批处理选择菜单问题 发表于 2008-10-18 23:38 ·  中国 江西 联通
初级用户
积分 41
发帖 32
注册 2008-10-16 00:11
17年会员
UID 128490
性别 男
状态 离线
菜单大致如下, 以下可以选则 1 2 3 4 执行命令 但是要是输入了 5 等错误的数字后如何返回选择菜单.

代码大致如下:

@ECHO OFF 

ECHO.
ECHO. 1 执行命令a
ECHO.
ECHO. 2 执行命令b
ECHO.
ECHO. 3 执行命令c
ECHO.
ECHO. 4 退 出
ECHO.
echo. 请输入选择项目的序号:
set /p ID=
if "%id%"=="1" goto cmd1

if "%id%"=="2" goto cmd2

if "%id%"=="3" goto cmd3

IF "%id%"=="4" exit

:cmd1

echo 执行命令a
cmd1.exe
exit

:cmd2

echo 执行命令b
cmd2.exe
exit

:cmd3
echo 执行命令c
cmd3.exe
exit


[ Last edited by HAT on 2008-10-20 at 22:17 ]
2 发表于 2008-10-19 00:08 ·  中国 福建 福州 连江县 电信
中级用户
★★
积分 356
发帖 115
注册 2004-07-27 00:00
22年会员
UID 29114
性别 男
状态 离线
:lp
ECHO.
ECHO. 1 执行命令a
ECHO.
ECHO. 2 执行命令b
ECHO.
ECHO. 3 执行命令c
ECHO.
ECHO. 4 退 出
ECHO.
echo. 请输入选择项目的序号:
set /p ID=
if "%id%"=="1" goto cmd1

if "%id%"=="2" goto cmd2

if "%id%"=="3" goto cmd3

IF "%id%"=="4" exit
cls
goto :lp
。。。。。。。。。。。。。
3 发表于 2008-10-19 00:14 ·  中国 江西 联通
初级用户
积分 41
发帖 32
注册 2008-10-16 00:11
17年会员
UID 128490
性别 男
状态 离线
谢谢,寒.我还一只在想要用IF 做什么样的判断语句..

- -

55555 我错了。
4 发表于 2008-10-19 00:18 ·  中国 江西 联通
初级用户
积分 41
发帖 32
注册 2008-10-16 00:11
17年会员
UID 128490
性别 男
状态 离线
兄弟,你的方法不对啊,

你那只是一个循环到
if "%id%"=="1" goto cmd1
啊.

你自己看看

@echo off
:lp
ECHO.
ECHO. 1 执行命令a
ECHO.
ECHO. 2 执行命令b
ECHO.
ECHO. 3 执行命令c
ECHO.
ECHO. 4 退 出
ECHO.
echo. 请输入选择项目的序号c d e f:
set /p ID=
if "%id%"=="1" goto cmd1
pause
exit

if "%id%"=="2" goto cmd2
exit

if "%id%"=="3" goto cmd3
exit

IF "%id%"=="4" exit
cls
goto :lp
5 发表于 2008-10-19 00:20 ·  中国 江西 联通
初级用户
积分 41
发帖 32
注册 2008-10-16 00:11
17年会员
UID 128490
性别 男
状态 离线
也就是说当你输入5以后的数值时 P处理只回到 CMD1
6 发表于 2008-10-19 09:04 ·  中国 江西 赣州 电信
初级用户
积分 80
发帖 45
注册 2006-09-22 22:28
19年会员
UID 63398
性别 男
来自 jiangxi
状态 离线
给ID赋上初值,
set id=1
set /p id=请输入:(默认为1)
7 发表于 2008-10-19 11:29 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
下次贴代码的时候建议加code标签

Q: 如何给代码加code标签?
A: http://www.cn-dos.net/forum/viewthread.php?tid=43735#pid304733
参考:http://www.cn-dos.net/forum/faq.php?page=misc#1
8 发表于 2008-10-19 13:11 ·  中国 江西 九江 电信
初级用户
积分 41
发帖 32
注册 2008-10-16 00:11
17年会员
UID 128490
性别 男
状态 离线
这样输入5以后的数字不是一样?
9 发表于 2008-10-20 07:53 ·  中国 广东 中山 电信
新手上路
积分 3
发帖 2
注册 2008-09-27 10:35
17年会员
UID 126768
性别 男
状态 离线
可以用 if not 命令来判断




ECHO off
:b
cls
ECHO. 1 执行命令a
ECHO.
ECHO. 2 执行命令b
ECHO.
ECHO. 3 执行命令c
ECHO.
ECHO. 4 退 出
ECHO.
echo. 请输入选择项目的序号:
set /p ID=
if "%id%"=="1" goto cmd1

if "%id%"=="2" goto cmd2

if "%id%"=="3" goto cmd3

IF "%id%"=="4" exit
IF not "%id%"=="1,2,3,4" goto a

:cmd1

echo 执行命令a
cmd1.exe


:cmd2

echo 执行命令b
cmd2.exe


:cmd3
echo 执行命令c
cmd3.exe



:A
cls
echo 你的输入错误,请重新输入.
ping -n 3 127.1>nul
goto b
10 发表于 2008-10-20 09:04 ·  中国 江西 赣州 电信
初级用户
积分 80
发帖 45
注册 2006-09-22 22:28
19年会员
UID 63398
性别 男
来自 jiangxi
状态 离线
楼上兄弟很对,因为ID只有1、2、3、4的判断,所以输入“5”时候程序判断完之后会继续执行下面的操作!~
11 发表于 2008-10-20 21:49 ·  中国 江西 联通
初级用户
积分 41
发帖 32
注册 2008-10-16 00:11
17年会员
UID 128490
性别 男
状态 离线
感谢9楼

不过你的代码不知道你自己试过没,你编的是输入任何数字都回报错的。



同时感谢楼上的各位的帮助.


今天我已经找到方法了。借用9楼的 ping -n 3 127.1>nul

这个命令更完美了.

命令如下


ECHO off
:a
cls
ECHO. 1 执行命令a
ECHO.
ECHO. 2 执行命令b
ECHO.
ECHO. 3 执行命令c
ECHO.
ECHO. 4 退 出
ECHO.
echo. 请输入选择项目的序号:
set /p ID=
if "%id%"=="1" goto cmd1
if "%id%"=="2" goto cmd2
if "%id%"=="3" goto cmd3
IF "%id%"=="4" exit

cls
echo.
echo 你的输入错误,请重新输入.
ping -n 3 127.1>nul
goto a

:cmd1
echo 执行命令a
pause
exit

:cmd2
echo 执行命令b
pause
exit

:cmd3
echo 执行命令c
pause
exit
12 发表于 2009-02-25 23:30 ·  中国 黑龙江 哈尔滨 电信
初级用户
积分 27
发帖 16
注册 2008-10-27 09:25
17年会员
UID 129203
性别 男
状态 离线
学习
13 发表于 2009-02-26 03:01 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
@echo off
set menus="1 执行命令a" "2 执行命令b" "3 执行命令c" "4 退 出"
setlocal enabledelayedexpansion
:lp
cls
for %%a in (%menus%) do echo.&echo.%%~a
set key=&set /p key=请输入选择项目的序号:
for %%b in (%menus%) do set m=%%~b&if "!m:~0,1!"=="%key%" goto :sub%key%
goto :lp

:sub1
echo 执行命令a

goto :eof
:sub2
echo 执行命令b

goto :eof
:sub3
echo 执行命令c

goto :eof
:sub4
endlocal
exit

[ Last edited by netbenton on 2009-2-26 at 05:39 ]
精简
=> 个人网志
14 发表于 2009-02-27 07:59 ·  中国 四川 绵阳 电信
初级用户
积分 75
发帖 46
注册 2007-09-25 22:21
18年会员
UID 98274
性别 男
状态 离线
@echo off
CLS
COLOR 0b
MODE con: COLS=50 LINES=20
@echo.
@echo 1 执行命令a
@echo.
@echo 2 执行命令b
@echo.
@echo 3 执行命令c
@echo.
SET Choice=
SET /P Choice= 请选择(1/2/3/):
IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%
ECHO.
IF /I "%Choice%"=="1" GOTO cmd1
IF /I "%Choice%"=="2" GOTO cmd2
IF /I "%Choice%"=="3" GOTO cmd3
goto :eof

:cmd1

echo 执行命令a
cmd1.exe
exit

:cmd2

echo 执行命令b
cmd2.exe
exit

:cmd3
echo 执行命令c
cmd3.exe
exit
努力学习!我行的!
论坛跳转: