Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 如何批量创建嵌套变量?_Variables_Batch File_Nested - Fatal编程技术网

Variables 如何批量创建嵌套变量?

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

我正在尝试在我创建的批处理游戏中获取嵌套变量。 我想让它选择一个随机变量并将其更改为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
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

脚本经过优化,每次迭代都会选择一个有效的未使用字母。

谢谢!我做了一些轻微的调整,使之符合我的目的:)。谢谢!我做了一些轻微的调整,使其符合我的目的:)。