![Board logo](images/default/logo.gif)
标题: [特效代码] [已解决]根据用户输入运行指定代码的批处理IF判断没有运行 [打印本页]
作者: hdw 时间: 2009-8-8 07:35 标题: [已解决]根据用户输入运行指定代码的批处理IF判断没有运行
还是先前发过的代码- @echo off
- :begin
- cls
- color 5f
- echo.
- echo.
- echo 批处理菜单
- echo.
- echo ============================================================
- echo 1/选择输入1将显示当前时间
- echo 2/选择输入2将显示当前日期
- echo 3/选择输入3将列出当前目录文件列表
- echo 4/退出该系统
- echo ============================================================
- echo.&echo.
- 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
- )
- )
- )
- )
- 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 是否真的要退出该系统[y/n]
- set /p answer=
- if "%answer%"=="Y" (pause&goto end)
- if "%answer%"=="y" (pause&goto end)
- if "%answer%"=="N" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
- if "%answer%"=="n" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
- )
- :end
- cls
- echo.
- echo.
- echo 你输入了%num%将要退出该系统
- pause
- set num=
- set answer=
- exit
复制代码
下面的这段代码单拿出来就可以运行,但是放到上面就没有进行判断而是直接退出了,问题不知道出在哪里-
- echo 是否真的要退出该系统[y/n]
- set /p answer=
- if "%answer%"=="Y" (pause&goto end)
- if "%answer%"=="y" (pause&goto end)
- if "%answer%"=="N" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
- if "%answer%"=="n" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
复制代码
[ 本帖最后由 hdw 于 2009-8-8 15:41 编辑 ]
作者: keen 时间: 2009-8-8 11:06 标题: 回复 1楼 的帖子
if "%num%"=="4" (
cls
echo.
echo.
echo 是否真的要退出该系统[y/n]
set /p answer=
if "%answer%"=="Y" (pause&goto end)
if "%answer%"=="y" (pause&goto end)
if "%answer%"=="N" (
cls
echo 您将返回菜单主页面
pause
goto begin
)
if "%answer%"=="n" (
cls
echo 您将返回菜单主页面
pause
goto begin
)
)
改成下面的样子:- if "%num%"=="4" (
- cls
- echo.
- echo.
- echo 是否真的要退出该系统[y/n]
- set /p answer=
- )
- if "%answer%"=="Y" (pause&goto end)
- if "%answer%"=="y" (pause&goto end)
- if "%answer%"=="N" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
- if "%answer%"=="n" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
复制代码
作者: hdw 时间: 2009-8-8 11:42
是不是放在里面就有语法错误,无法执行啊?还是另有原因?
作者: keen 时间: 2009-8-8 12:43 标题: 回复 3楼 的帖子
用括号包括所有的句子,批处理运行时,会把所有的句子当成一句,因为批处理有预读机制。
当%answer%包含在括号中时,在预读时,会直接找寻整个if语句前,是否对answer的变量赋值,没有赋值的话,在预读if语句时,就会给变量answer赋值为空,就是没有值赋给它。所以在执行时- if "%answer%"=="Y" (pause&goto end)
- if "%answer%"=="y" (pause&goto end)
- if "%answer%"=="N" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
- if "%answer%"=="n" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
复制代码
就会变成:- if ""=="Y" (pause&goto end)
- if ""=="y" (pause&goto end)
- if ""=="N" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
- if ""=="n" (
- cls
- echo 您将返回菜单主页面
- pause
- goto begin
- )
复制代码
这样的话,就不会执行跳转到begin或跳转到end。
而是执行到if语句的下面一行,就是:end段。
以后遇到这种情况,可以把@echo off去掉。把所有的cls去掉,执行,看执行过程中,那儿出错了。
[ 本帖最后由 keen 于 2009-8-8 12:44 编辑 ]
作者: hdw 时间: 2009-8-8 15:39
哦明白了。谢谢
作者: ghostwar 时间: 2009-9-30 07:39
晕!
一大半看不懂!
看来还得努力!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |