是否有任何方法可以简化此代码并使之仍可继续运行?
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)
答案 0 :(得分:3)
或者,您也可以使用列表:
associatedUsers
(优点:您可以在不修改代码的情况下(例如在游戏过程中)“即时”修改列表(删除或添加项目)
答案 1 :(得分:2)
您可以使用伪数组(因为不真正支持数组)。
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%]!"
答案 2 :(得分:2)
另一种较短的方法:
@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答案中所示的相同的自扩展代码方法...
答案 3 :(得分:1)
Stephan回答的类似方法,将列表转换为数组, 但使用某种自扩展代码。
:: Q:\Test\2019\04\08\SO_55575835.cmd
@Echo off&SetLocal EnableDelayedExpansion
Set i=0&Set "foodtypes= bread apple steak banana"
Set "foodtypes=%foodtypes: ="&Set /a i+=1&Set "foodtypes[!i!]=%"
set /a food=%random% %% %i% + 1
set "foodtype=!foodtypes[%food%]!"
set food
示例输出:
> SO_55575835.cmd
food=2
foodtype=apple
foodtypes[1]=bread
foodtypes[2]=apple
foodtypes[3]=steak
foodtypes[4]=banana
答案 4 :(得分:0)
关于多行字符串方法(代码中的空行是必需的)呢?
@echo off
set /A "FOOD=%RANDOM%%%4+1"
for /F "tokens=1*" %%I in (^"
1 bread^
2 apple^
3 steak^
4 banana^
^") do if %%I equ %FOOD% set "FOODTYPE=%%J"
echo %FOOD%: %FOODTYPE%
示例输出:
2: apple
顺便说一下,set /a food=%random% %% 6 + 1
将一个值从1
分配给 6
。