批量选择命令不起作用

时间:2017-01-01 16:28:05

标签: batch-file cmd choice

我有这个问题,为什么这个选择命令不会起作用。我查看了这个网站并比较了我的所有脚本,但我无法弄清楚为什么它不会工作 http://www.computerhope.com/issues/ch001674.htm

@ECHO OFF
:START
echo 1 to quit or 2 to print hello and go back to this screen
CHOICE /C:12 /N
IF ERRORLEVEL ==1 GOTO QUIT
IF ERRORLEVEL ==2 GOTO HELLO
GOTO :START
:QUIT
EXIT
:HELLO 
ECHO hello
GOTO :END
:END

3 个答案:

答案 0 :(得分:0)

我做了一些更改并删除了不必要的代码。

var filtered = arr.map(function(item){
 return //?? 
})

答案 1 :(得分:0)

错误级别的测试错误。

有两种可能性:

@ECHO OFF

:BEGIN
ECHO 1 to quit or 2 to print hello and go back to this screen
CHOICE /C:12 /N
IF ERRORLEVEL 2 GOTO HELLO
IF ERRORLEVEL 1 EXIT /B
GOTO BEGIN

:HELLO
ECHO hello
GOTO BEGIN

请参阅Microsoft支持文章Testing for a Specific Error Level in Batch Files

批处理用户必须按1或2,否则批处理执行不会继续。因此,使用

可以从最高到最低进行错误级别的测试
if errorlevel X ...

表示如果errorlevel 大于或等于 X,则执行命令(或命令块)。

使用此语法的优点是它甚至可以在命令块中工作,而无需使用延迟扩展。

第二种可能性是:

@ECHO OFF

:BEGIN
ECHO 1 to quit or 2 to print hello and go back to this screen
CHOICE /C:12 /N
IF %ERRORLEVEL% == 1 EXIT /B
IF %ERRORLEVEL% == 2 GOTO HELLO
GOTO BEGIN

:HELLO
ECHO hello
GOTO BEGIN

通过显式引用环境变量ERRORLEVEL,在 IF 评估条件之前进行扩展,错误级别测试的顺序不再重要。

此方法的缺点是,如果 CHOICE 需要使用延迟扩展,并且错误级别评估条件位于使用( ... )定义的命令块内。

在命令提示符窗口if /?set /?中运行,以获取有关正确使用命令 IF SET 的帮助,分别获取有关延迟的信息扩展

使用标签START是可能的,但不可取,因为这是Windows命令解释程序的内部命令。找到START意味着标签时遇到麻烦,而START意味着批处理文件将使用命令 START 。因此,BEGIN用作标签。

建议至少在开发批处理文件时只使用参数/B命令 EXIT ,只退出批处理,但不要完全退出运行命令进程独立调用层次结构和用于启动cmd.exe的选项。

通过在命令提示符窗口(cmd.exe以选项/K启动以保持控制台窗口打开)中运行批处理文件,而不是双击批处理文件,可以更轻松地调试批处理文件(由于命令提示符窗口保持打开状态,cmd.exe在使用/C而不是仅仅exit /B时使用选项exit关闭以完成批量执行。有关Windows命令解释程序选项的详细信息,请在命令提示符窗口cmd /?中运行。

在这两个错误级别的评估之后,

GOTO BEGIN从未执行过。因此,此批处理文件也可以写为:

@ECHO OFF

:BEGIN
ECHO 1 to quit or 2 to print hello and go back to this screen
CHOICE /C:12 /N
IF ERRORLEVEL 2 GOTO HELLO
EXIT /B

:HELLO
ECHO hello
GOTO BEGIN

答案 2 :(得分:0)

简单:

@ECHO OFF
:START
echo 1 to quit or 2 to print hello and go back to this screen
CHOICE /C 12 /N
GOTO OPTION-%ERRORLEVEL%

:OPTION-1  Quit
EXIT

:OPTION-2  Hello
ECHO hello
GOTO START