Variables 如何批量创建嵌套变量?
我正在尝试在我创建的批处理游戏中获取嵌套变量。 我想让它选择一个随机变量并将其更改为X,但如果它已经被选择,它应该返回并选择一个不同的数字Variables 如何批量创建嵌套变量?,variables,batch-file,nested,Variables,Batch File,Nested,我正在尝试在我创建的批处理游戏中获取嵌套变量。 我想让它选择一个随机变量并将其更改为X,但如果它已经被选择,它应该返回并选择一个不同的数字 set 1=a set 2=b set 3=c set 4=d set 5=e 这些是变量,下面是代码 setlocal enabledelayedexpansion :eliminator set /a eliminate=(%random * 5) / 32767 + 1 if %%eliminate%%==X goto eliminator ech
set 1=a
set 2=b
set 3=c
set 4=d
set 5=e
这些是变量,下面是代码
setlocal enabledelayedexpansion
:eliminator
set /a eliminate=(%random * 5) / 32767 + 1
if %%eliminate%%==X goto eliminator
echo The letter !!eliminate!! was chosen
timeout 5
set %%eliminate%%=X
goto eliminator
现在,问题是,当我尝试回显它时,它会写入变量的名称而不是值。此外,已经选择的变量将再次被选择。我有办法解决这个问题吗?谢谢。试试这个:
@echo off&setlocal
set "var1=a"
set "var2=b"
set "var3=c"
set "var4=d"
set "var5=e"
:loop
set /a rd=%random%%%5+1
if defined var%rd% call echo %%var%rd%%%
set "var%rd%="
set "var" >nul 2>&1 && goto:loop
..输出(可能不同):
D
A.
C
B
E
试试这个:
@echo off&setlocal
set "var1=a"
set "var2=b"
set "var3=c"
set "var4=d"
set "var5=e"
:loop
set /a rd=%random%%%5+1
if defined var%rd% call echo %%var%rd%%%
set "var%rd%="
set "var" >nul 2>&1 && goto:loop
..输出(可能不同):
D
A.
C
B
E
您发布的代码缺少
random
周围的结束%
-应该是%random%
对于介于1和5之间的随机数,您的公式比需要的要复杂得多。我将使用:
set /a eliminate=%random% %% 5 + 1
要展开“嵌套变量”,您需要!%消除%代码>
但我会完全重写你的算法。我认为以下内容符合您的要求:
@echo off
setlocal enableDelayedExpansion
set "chars=abcde"
set charCnt=5
:loop
set /a "pos=%random% %% charCnt, pos2=pos+1, charCnt-=1"
set "letter=!chars:~%pos%,1!"
echo The letter %letter% was chosen
set "chars=!chars:~0,%pos%!!chars:~%pos2%!"
if defined chars goto loop
脚本经过优化,在每次迭代时总是选择一个有效的未使用的字母。您发布的代码缺少random
周围的结束%
-应该是%random%
对于介于1和5之间的随机数,您的公式比需要的要复杂得多。我将使用:
set /a eliminate=%random% %% 5 + 1
要展开“嵌套变量”,您需要!%消除%代码>
但我会完全重写你的算法。我认为以下内容符合您的要求:
@echo off
setlocal enableDelayedExpansion
set "chars=abcde"
set charCnt=5
:loop
set /a "pos=%random% %% charCnt, pos2=pos+1, charCnt-=1"
set "letter=!chars:~%pos%,1!"
echo The letter %letter% was chosen
set "chars=!chars:~0,%pos%!!chars:~%pos2%!"
if defined chars goto loop
脚本经过优化,每次迭代都会选择一个有效的未使用字母。谢谢!我做了一些轻微的调整,使之符合我的目的:)。谢谢!我做了一些轻微的调整,使其符合我的目的:)。