batch-file - Windows 批处理文件中等效的 Switch 语句

原文 标签 batch-file switch-statement

我想知道是否有一种简单的方法可以根据单个表达式的值在 Windows 批处理文件中分支执行。类似于 C、C++、C#、Java、JavaScript、PHP 和其他真实编程语言中的 switch/case 块。

我唯一的解决方法是一个简单的 if/else 块,其中重复检查相同表达式与不同值的相等性:

IF "%ID%"=="0" (
  REM do something
) ELSE IF "%ID%"=="1" (
  REM do something else
) ELSE IF "%ID%"=="2" (
  REM do another thing
) ELSE (
  REM default case...
)

如此愚蠢。有更好的解决方案吗?

最佳答案

我最终使用了包含 AjV Jsy 建议的 case 表达式值的标签名称。无论如何,我使用CALL而不是 GOTO跳转到正确的案例块和 GOTO :EOF往回跳。下面的示例代码是一个完整的批处理脚本,说明了这个想法。

@ECHO OFF

SET /P COLOR="Choose a background color (type red, blue or black): "

2>NUL CALL :CASE_%COLOR% # jump to :CASE_red, :CASE_blue, etc.
IF ERRORLEVEL 1 CALL :DEFAULT_CASE # If label doesn't exist

ECHO Done.
EXIT /B

:CASE_red
  COLOR CF
  GOTO END_CASE
:CASE_blue
  COLOR 9F
  GOTO END_CASE
:CASE_black
  COLOR 0F
  GOTO END_CASE
:DEFAULT_CASE
  ECHO Unknown color "%COLOR%"
  GOTO END_CASE
:END_CASE
  VER > NUL # reset ERRORLEVEL
  GOTO :EOF # return from CALL

关于batch-file - Windows 批处理文件中等效的 Switch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423443/

相关文章:

c - C编程开关盒

c - Switch语句在终止后不会重新启动

c# - 通用类的C#模式匹配属性?

batch-file - 在 Notepad++ 中打开某种类型的所有文件的批处理命令

batch-file - 如何在bat文件中插入python代码?

windows - 发生错误时跳过

java - try/catch对于+ if + switch语句,break成立;如果包含在包含switch的for循环中的if语句之后需要,为什么?

actionscript-3 - AS3 用 switch 语句替换 if 和 else if

windows - 脚本忽略退出命令并中断功能 BATCH/CMD

batch-file - 如何跳过批处理文件中发现的错误并继续执行命令行?