返回开始如果没有输入输入(Bat文件)

时间:2011-07-21 02:49:09

标签: batch-file if-statement

好的,首先,我很抱歉我的英语不好:) 现在我的问题

我正在尝试创建一个包含多个选项的脚本文件,但我遇到了一个问题。 如果我没有输入输入(只需按回车键),文件就会显示错误并关闭。 现在我的问题是,在没有输入输入的情况下是否有一个强制文件返回Start的命令?

我脚本的相关部分

:input
@echo off
CLS
ECHO   #############################################
ECHO   #                                           #
ECHO   #  1 - Make A System Folder or File         #
ECHO   #  2 - Restore Folder or File               #
Echo   #  3 - Exit                                 #
ECHO   #                                           #
ECHO   #############################################

SET /P O=Set Your Choice And Press Enter:
ECHO Loading .........
(
IF %O%==1 GOTO Hide
IF %O%==2 GOTO Show
IF %O%==3 GOTO Exit
IF %O%=="" GOTO input
) 
ELSE (
    GOTO input
)

正如您所看到的,我尝试使用“Else”,但它只能部分工作。 如果我输入的变量不是给定列表的一部分(在我的情况下为1,2,3),则文件返回到开头,即使我发送非输入请求后记,文件也能正常工作。 问题非常具体,只有当第一个输入是非输入时才会出现问题。 在任何其他情况下,脚本工作正常

谢谢你,我很遗憾我的英语不好:)

4 个答案:

答案 0 :(得分:2)

括号不是必需的。试试这个,

:input
@echo off
CLS
ECHO   #############################################
ECHO   #                                           #
ECHO   #  1 - Make A System Folder or File         #
ECHO   #  2 - Restore Folder or File               #
Echo   #  3 - Exit                                 #
ECHO   #                                           #
ECHO   #############################################

SET /P O=Set Your Choice And Press Enter:
ECHO Loading .........
IF %O%==1 GOTO Hide
IF %O%==2 GOTO Show
IF %O%==3 GOTO Exit
IF %O%=="" GOTO input

ELSE 
GOTO input

作为旁注,你的英语非常好!

答案 1 :(得分:1)

  1. 输入前始终复位变量。当用户按下输入变量时,不会自动重置。

    :: Delete variable %O%
    SET "O="
    SET /P "O=Set Your Choice And Press Enter: "
    
  2. 始终将变量用引号(在IF中)

    IF "%O%"=="1" GOTO Hide
    IF "%O%"=="2" GOTO Show
    IF "%O%"=="3" GOTO Exit
    
  3. GOTO Label永远不会返回(异常 - goto :label在某些疯狂的情况下)。在你的情况下,你可以写:

    IF "%O%"=="1" GOTO Hide
    IF "%O%"=="2" GOTO Show
    IF "%O%"=="3" GOTO Exit
    
    GOTO INPUT
    
  4. 在每个'procedure'命令exit /B之后添加,以防止在代码更改后疯狂解析。警告:goto命令在C ++中不像void那样工作,因此命令exit /B将停止脚本。但是,如果您使用call :label命令exit /B,则只会在:label下停止代码。

答案 2 :(得分:0)

是的,如果你想去:start或:任何没有输入的情况,解决方案就是 写下以下内容:

第一行是关键

set num=""

set /P num=%input%

if %num%==1 goto Choice1
if %num%==2 goto Choice2

if "%num%"=="" goto Start

goto Start

最后一行是针对您选择范围之外的输入 (在此示例中,3将无效并再次转到“开始”

虽然有更好更简单的解决方案!

这只是一个“更专业”的多选菜单解决方案,它真的很有用......

不要设置%input%和所有爵士乐,只需使用选择!如果输入的值超出范围(123表示您可以选择1或2或3),则会出现“嘟嘟”声,表示输入无效。

set errorlevel=   

CHOICE /C 123  >nul
if %errorlevel%==1 goto Choice1
if %errorlevel%==2 goto Choice2
if %errorlevel%==3 goto Choice3

就是这样!这么简单吧?所以只是解释这些线的意思......

第一行只是将errorlevel设置为空白,因为当你获得更高级时,可能会意外地为errorlevel分配一个值。所以,请稍后让自己头疼并擦掉它。

> nul“隐藏”这是一个选择的事实。只需在其上方放置一条回音信息,即“按X号选择X”。我喜欢这个,因为你之后不需要按下输入 - 如果你有很多选择,节省时间

现在,错误级别为而非分配了您的输入...所以小心!

我的选择可能是“CHOICE / C 3689> nul”,但错误级别输出仍为errorlevel = 1表示输入3,errorlevel = 2表示输入6,依此类推。

因此,如果你可以通过按0和CHOICE / C 0123选择返回主菜单,按0将是errorlevel = 1,按1将是errorlevel = 2 ...等。

选择是非常有用的,只需去选择/?了解更多详情。

答案 3 :(得分:0)

我尝试过

@echo off
title (title)
:c
echo ==============================
echo =  1=Create Folder/File      =
echo =  2=File Restore            =
echo =  3=Exit                    =
echo ==============================
:a
echo Press space-Enter for nothing
set /p 0=What do you want to do? :
if /i "%0%"=="1" goto 1
if /i "%0%"=="2" goto 2
if /i "%0%"=="3" goto 3
if /i "%0%"==" " goto h
PAUSE
:1
set /p key=What do you want your folder name to be? :
cd
Mkdir %key%
PAUSE
:2
set /p p=Whats the name of the file you want to restore? :
chkdsk %p%
PAUSE
:3
echo Exiting.
ping localhost -n 2
cls
echo Exiting..
ping localhost -n 2
cls
Echo Exiting...
ping localhost -n 2
exit /b
:h
set /p YN=Go back? (Y,N)
if %YN%=="Y" goto a
if %YN%=="N" goto 3
PAUSE