有什么方法可以简化这段代码,并使其继续下去吗?
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)
作为另一种选择,您也可以使用列表:
@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..相同的自扩展代码方法。