Batch file 如果未输入任何输入(Bat文件),则返回开始
好的,首先我为我糟糕的英语道歉:) 现在来解决我的问题 我试图创建一个具有多个选项的脚本文件,但遇到了一个问题。 如果我没有输入(只需按enter键),文件将显示错误并关闭。 现在我的问题是,如果没有输入,是否有一个命令将强制文件返回到起始位置 这是我剧本的相关部分Batch file 如果未输入任何输入(Bat文件),则返回开始,batch-file,if-statement,Batch File,If Statement,好的,首先我为我糟糕的英语道歉:) 现在来解决我的问题 我试图创建一个具有多个选项的脚本文件,但遇到了一个问题。 如果我没有输入(只需按enter键),文件将显示错误并关闭。 现在我的问题是,如果没有输入,是否有一个命令将强制文件返回到起始位置 这是我剧本的相关部分 :input @echo off CLS ECHO ############################################# ECHO #
: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中),则文件将返回到开头,即使我在之后发送了非输入请求,文件仍能正常工作。
问题非常具体,只有当第一个输入是非输入时,问题才会出现。
在任何其他情况下,脚本都可以正常工作
谢谢你,我再次为我糟糕的英语感到非常抱歉:)不需要括号。试试这个
: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
顺便说一句,你的英语很好
:: Delete variable %O%
SET "O="
SET /P "O=Set Your Choice And Press Enter: "
GOTO-Label
永远不会返回(例外情况-GOTO:Label
在某些疯狂的情况下)。在你的情况下,你可以写:
IF "%O%"=="1" GOTO Hide
IF "%O%"=="2" GOTO Show
IF "%O%"=="3" GOTO Exit
GOTO INPUT
exit/B
,以防止代码更改后出现疯狂解析。警告:调用:label
命令退出/B
将仅在:label
下停止代码是的,如果您想在没有输入的情况下转到:开始或:任何内容,则需要一个解决方案 写下以下内容: 这第一行是关键
set num=""
set /P num=%input%
if %num%==1 goto Choice1
if %num%==2 goto Choice2
if "%num%"=="" goto Start
goto Start
最后一行用于超出您选择范围的输入
(在本例中,3将无效,并再次转到起始位置。)
不过有一个更好更简单的解决方案!
这只是一个“更专业”的多选菜单解决方案,它真的很有用
不要设置%input%和所有jazz,只需使用choice!如果输入的值超出范围(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”。我喜欢这一点,因为你不需要在之后按回车键-如果你有很多选择,可以节省时间
现在,errorlevel是而不是分配给您的输入…所以要小心
我的选择可以是“CHOICE/C 3689>nul”,但输入3时errorlevel输出仍然是errorlevel=1,输入6时errorlevel=2,依此类推
因此,如果您可以选择按0返回主菜单,并选择/C 0123,则按0将返回errorlevel=1,按1将返回errorlevel=2…等等
选择非常有用,只需输入Choice/?了解更多详细信息。我试过了
@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
+1对于实际解决问题,尽管我可能不同意你答案的某些部分(比如在一些疯狂的情况下“goto:label”——你的意思是什么?)。此外,像这样放置
退出/b
是绝对多余的(而且你从来没有解释为什么要放在那里)。当我开始在批处理文件上编程“扫雷者”时,我遇到了一些我描述的错误。当我替换“goto-label”上的所有“goto:label”时,错误消失了。非常奇怪。关于命令“exit/b”-这是编写“exit/b”(或goto:eof)的好风格,可以防止在更改代码“goto:label”时进行下一次解析–我现在明白了,谢谢,我还以为你指的是别的。我从来没有使用过goto:label
,除了goto:eof
的特殊情况,所以我不知道这些事情。重新“退出/b”–样式点很好,甚至可能值得添加到答案中。只是在这种特殊情况下,exit/b
命令永远无法到达。此外,OP明确表示这只是脚本的一部分,您可以通过GOTO的存在和相应标签的缺失猜到。因此,再次,在没有解释的情况下使用这样的退出命令可能会让人困惑。无论如何,感谢您的澄清。
@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