提问者:小点点

如何简化具有大量if的批处理


有什么方法可以简化这段代码,并使其继续下去吗?

set /a food=%random% %% 6 + 1
if %food%==1 (set foodtype=bread)
if %food%==2 (set foodtype=apple)
if %food%==3 (set foodtype=steak)
if %food%==4 (set foodtype=banana)

等等。

我不知道有多少批次,但我希望有类似的东西:

set /a food=%random% %% 6 + 1
 if food = (1, 2, 3, 4) (set foodtype bread, apple, steak, banana)

共3个答案

匿名用户

作为另一种选择,您也可以使用列表:

@echo off
setlocal 
set count=0
set "foodlist=bread apple steak banana"
for %%a in (%list%) do set /a count+=1
set /a tok=%random% %% %count% + 1
for /f "tokens=%tok%" %%a in ("%foodlist%") do set "foodtype=%%~a"
echo/%foodtype%

(优点:你可以“即时”(例如在游戏过程中)修改列表(删除或添加项目),而不需要改编代码)

匿名用户

您可以使用伪数组(因为实际上不支持数组)。

setlocal EnableDelayedExpansion
set "arr_foodtype[0]=bread"
set "arr_foodtype[1]=apple"
set "arr_foodtype[2]=steak"
set "arr_foodtype[3]=banana"

set /a food=%random% %% 4

set "foodtype=!arr_foodtype[%food%]!"

匿名用户

另一种更简短的方法:

@echo off
setlocal EnableDelayedExpansion
set "foodList=bread apple steak banana "

set /A food=%random% %% 4

set "this=%foodList: =" & (if !food! equ 0 set "foodtype=!this!") & set /A "food-=1" & set "this=%"

echo %foodtype%

这个解决方案使用了与Lotping's Answer..相同的自扩展代码方法。