标题: [特效代码] [已解决]批处理菜单输入选择后没有任何反应 [打印本页]
作者: hdw 时间: 2009-8-5 21:33 标题: [已解决]批处理菜单输入选择后没有任何反应
- @echo off
- set num=
- set answer=
- :begin
- cls
- echo.
- echo.
- echo ============================================================
- echo 1/选择输入1将显示当前时间
- echo 2/选择输入2将显示当前日期
- echo 3/选择输入3将列出当前目录文件列表
- echo 4/退出该系统
- echo ============================================================
- echo.&echo.
- set /p num=请输入要选择的项目:
- if "%num%"=="1"(
- cls
- echo.
- echo.
- echo 显示当前时间为:
- time /t
- pause
- goto begin
- )
- if "%num%"=="2"(
- cls
- echo.
- echo.
- echo 显示当前日期为:
- date /t
- pause
- goto begin
- )
- if "%num%"=="3"(
- cls
- echo.
- echo.
- echo 显示目录下文件列表为:
- dir /w
- pause
- goto begin
- )
- if "%num%"=="4"(
- cls
- echo.
- echo.
- echo.
- pause
- set /p answer=是否真的要推出该系统(y/n)?
- pause
- if "%answer%"=="Y"(
- pause
- goto end
- )
- if "%answer%"=="N"(
- pause
- goto begin
- )
- )
- echo.
- echo.
- echo 你输入了%num%将要退出该系统
- pause
- set num=
- set answer=
- exit
复制代码
[ 本帖最后由 hdw 于 2009-8-7 08:44 编辑 ]
作者: defanive 时间: 2009-8-5 22:13
if "%num%"=="1"(
这些语句中应该在(前加个空格。。。
作者: BBCC 时间: 2009-8-5 22:17
语法问题……话说下次缩进一下
其实可以用 xxx.bat 2>err.txt 的命令来查看错误信息滴~·
作者: czl1378 时间: 2009-8-5 22:17
楼主,所有的if语句块括号前都加个空格。比如 if "%num%"=="1"( ,应该是这样:if "%num%"=="1" ( 。
还有,set /p answer=是否真的要推出该系统(y/n)? 这里的y/n不能在括号内,不然系统会以为你的前一个if语句块结束了。你可以换成[y/n]?。
作者: januapr 时间: 2009-8-5 23:17
出错的地方楼上的朋友都已经指出了,呵呵
在批处设计方面我想说一下个人看法:
在选择过滤方面应该要加强一下,
set /p num=请输入要选择的项目:
这里如果用户不按要求输入了非1,2,3,4的选项怎么办?
set /p answer=是否真的要推出该系统[y/n]?
这一句后面的
if "%answer%"=="Y" ( 和 if "%answer%"=="N" (
这两个语句中,是否用大小的Y和N?如果用大写的话,当用户不想退出而按了n 时,结果还是退出了。
作者: hdw 时间: 2009-8-6 13:14 标题: 谢谢各位指教
我说嘛,命令输的都没问题,怎么就是无法正确运行。原来是缺少个空格。谢谢大家的帮助啊!
作者: hdw 时间: 2009-8-6 16:26 标题: 改进1
对于如果输入1 2 3 4以外的数字可在“set /p num=请输入要选择的项目:”后插入以下代码进行判断并提示重新输入
- if not "%num%"=="1" (
- if not "%num%"=="2" (
- if not "%num%"=="3" (
- if not "%num%"=="4" (
- cls
- echo.&echo.
- echo.
- echo 您的输入不符合要求,请重新输入
- echo.
- pause
- goto begin
- )
- )
- )
- )
复制代码
作者: xxx 时间: 2009-8-6 16:34 标题: 回复 7楼 的帖子
其实不用那么多层判断的,想想还有什么其他办法不?
作者: batman 时间: 2009-8-6 18:08
楼主可参考下面的代码来修改主:- @echo off
- :begain
- set /p select=请输入你的选择(1 2 3):
- if not defined select cls&goto begain
- if %select% geq 1 if %select% leq 3 (
- goto %select%
- ) else (
- cls&goto begain
- )
- :1
- echo bathome&goto end
- :2
- echo batman&goto end
- :3
- echo bbs.bathome.net
- :end
- pause>nul
复制代码
[ 本帖最后由 batman 于 2009-8-6 18:11 编辑 ]
作者: netbenton 时间: 2009-8-6 18:41
这个是我比较喜欢用的方法。- @echo off&setlocal enabledelayedexpansion
- set "menu= 1 2 3 4 q "&在这里增改选项,注意前后都要有空格
- :loop
- cls
- echo.
- echo.
- echo ============================================================
- echo 1/选择输入1将显示当前时间
- echo 2/选择输入2将显示当前日期
- echo 3/选择输入3将列出当前目录文件列表
- echo q/退出该系统
- echo ============================================================
- echo.&echo.
- set /p in=请输入要选择的项目:
- if "!menu: %in% =!" neq "!menu!" goto :m%in%
- rem 如果输入的字符存在menu中,则表达式不想等(neq),即成立,就执行goto :m%in%
-
- goto :loop
- :m1
- echo %time%&goto :loop
- :m2
- echo %date%&goto :loop
- :m3
- dir /b&goto :loop
- :mq
- echo 退出&pause
复制代码
[ 本帖最后由 netbenton 于 2009-8-6 20:48 编辑 ]
作者: hdw 时间: 2009-8-6 19:46
能否解释一下if "!menu: %in% =!" neq "!menu!" goto :m%in%
作者: hdw 时间: 2009-8-6 19:48
真是条条大路通罗马啊
作者: batman 时间: 2009-8-6 20:35
如问题得到了解决,请在主动在标题上加上[已解决]字样。。。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |