首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换案例在批处理文件中运行异常

切换案例在批处理文件中运行异常
EN

Stack Overflow用户
提问于 2019-11-11 14:58:58
回答 2查看 403关注 0票数 1

我试图让我的工作更容易,所以我决定学习并编写一个批处理文件,它允许我直接执行一些命令、.exe或其他东西。然而,在使用switch-case时,由于它继续执行所有的case statement,所以结果超出了我的预期。和来自示例输出ECHO is OFF的行,它来自哪里。下面是我的批处理文件。

代码语言:javascript
复制
@echo off
cls

echo ================================
echo    Run
echo ================================
echo 1. Remote Utilities
echo 2. Putty
echo 3. CMD
echo 4. Exit

set /p choice=Selection:
:switch
call :case-%choice% 2>nul || (
    echo Invalid Input
call :errorInput
)


:case-1
echo 
echo =================================
echo    Running RUT
echo =================================
echo Done
pause
goto :case-4

:case-2
echo Hello, here is Putty
pause
call :case-4

:case-3
cmd/k

:errorInput
cls
echo Your input __ "%choice%" is not valid.
call :case-4

:case-4
echo GoodBye
pause 

下面是示例输出

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-11 15:43:47

而是使用choice,让我们使用goto而不是call。如果按下,choice不允许任何其他字符执行任何操作,只允许/c之后的字符:

代码语言:javascript
复制
@echo off
cls

echo ================================
echo    Run
echo ================================
echo 1. Remote Utilities
echo 2. Putty
echo 3. CMD
echo 4. Exit

choice /c 1234 /m "Please choose an option"
goto :case-%errorlevel%
:case-1
echo(
echo =================================
echo    Running RUT
echo =================================
echo Done
pause
goto :case-4

:case-2
echo Hello, here is Putty
pause
goto :case-4

:case-3
start cmd /k

:case-4
echo GoodBye
pause
票数 1
EN

Stack Overflow用户

发布于 2019-11-11 15:50:33

call (当与标签一起使用时)的意思是“运行这个子例程,然后在它完成时返回到这里”。因为批处理脚本是自上而下运行的,直到代码用完为止,这意味着最后一行既是子例程的结尾,也是脚本的结尾。

当您选择1时,脚本将跳转到:case-1echo的"Running RUT“(加上显示echo is OFF,因为后面没有任何内容的那个echo ),跳到:case-4,暂停,然后运行完代码。此时,脚本认为该子例程调用已经结束,因此它跳回到调用:case-1的初始行。

不幸的是,您没有告诉脚本停止运行,所以它继续在代码中愉快地运行,再次进入:case-1echo-ing“running RUT",跳到:case-4,暂停,并再次耗尽代码。这一次,因为您不在调用中,并且脚本实际上没有代码可供运行,所以脚本最终结束。

若要避免脚本运行两次,请在switch语句后添加一个exit /b以结束代码。(另外,我将在不执行任何操作的echo中添加一个(,这样您就可以像预期的那样显示一个空行。)

代码语言:javascript
复制
@echo off
cls

echo ================================
echo    Run
echo ================================
echo 1. Remote Utilities
echo 2. Putty
echo 3. CMD
echo 4. Exit

set /p choice=Selection:
:switch
call :case-%choice% 2>nul || (
    echo Invalid Input
call :errorInput
)
exit /b


:case-1
echo(
echo =================================
echo    Running RUT
echo =================================
echo Done
pause
goto :case-4

:case-2
echo Hello, here is Putty
pause
call :case-4

:case-3
cmd/k

:errorInput
cls
echo Your input __ "%choice%" is not valid.
call :case-4

:case-4
echo GoodBye
pause 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58796814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档