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

发布于 2019-11-11 15:43:47
而是使用choice,让我们使用goto而不是call。如果按下,choice不允许任何其他字符执行任何操作,只允许/c之后的字符:
@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发布于 2019-11-11 15:50:33
call (当与标签一起使用时)的意思是“运行这个子例程,然后在它完成时返回到这里”。因为批处理脚本是自上而下运行的,直到代码用完为止,这意味着最后一行既是子例程的结尾,也是脚本的结尾。
当您选择1时,脚本将跳转到:case-1,echo的"Running RUT“(加上显示echo is OFF,因为后面没有任何内容的那个echo ),跳到:case-4,暂停,然后运行完代码。此时,脚本认为该子例程调用已经结束,因此它跳回到调用:case-1的初始行。
不幸的是,您没有告诉脚本停止运行,所以它继续在代码中愉快地运行,再次进入:case-1,echo-ing“running RUT",跳到:case-4,暂停,并再次耗尽代码。这一次,因为您不在调用中,并且脚本实际上没有代码可供运行,所以脚本最终结束。
若要避免脚本运行两次,请在switch语句后添加一个exit /b以结束代码。(另外,我将在不执行任何操作的echo中添加一个(,这样您就可以像预期的那样显示一个空行。)
@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 https://stackoverflow.com/questions/58796814
复制相似问题