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
Windows 如何使用变量运行命令?//如何生成带有变量的随机数?_Windows_Variables_Random_Command Line_Command Prompt - Fatal编程技术网

Windows 如何使用变量运行命令?//如何生成带有变量的随机数?

Windows 如何使用变量运行命令?//如何生成带有变量的随机数?,windows,variables,random,command-line,command-prompt,Windows,Variables,Random,Command Line,Command Prompt,我知道set zerothrohnine=%Random%*9/32768后跟echo%zerothryne%将生成一个介于0和9之间的随机数。但是解释器似乎并不是每次调用变量时都对其内容进行求值,因此,echo%zerothothnine%每次生成7 我查找了一个使用变量运行命令的方法,以便尝试强制它工作。我喜欢这个问题,因为它的方法非常基本;类似于“如何使用变量运行命令?”的内容,已适当标记。我不太喜欢这个答案,因为它很窄。投票率最高的选定答案是: 简单。只需运行set commandVar

我知道
set zerothrohnine=%Random%*9/32768
后跟
echo%zerothryne%
将生成一个介于0和9之间的随机数。但是解释器似乎并不是每次调用变量时都对其内容进行求值,因此,
echo%zerothothnine%
每次生成7

我查找了一个使用变量运行命令的方法,以便尝试强制它工作。我喜欢这个问题,因为它的方法非常基本;类似于“如何使用变量运行命令?”的内容,已适当标记。我不太喜欢这个答案,因为它很窄。投票率最高的选定答案是:

简单。只需运行
set commandVar=echo“Hello world.”
,然后运行
echo%commandVar%

当然,事实是这只适用于echo命令。>:[

无论如何,我不会再抱怨了。这就是我尝试过的:

set zerothrohnine=set/a number=%Random%*9/32768&echo%number%
后跟
echo%zerothrohnine%

不幸的是,SET命令的
&echo%number%
部分立即运行,产生“
%number%
”作为输出,并使用
echo%zerothothnine%
产生“
SET/a number=8436*9/32768
”作为输出


因此,有两个问题:如何使用变量(或其他替代方法)普遍实现运行命令,更紧迫的是,如何通过每次新命令调用在命令行生成新的随机数?

在为命令设置零到零之前,应先设置数字,如下所示:

set /a number=%Random%*9/32768
set zeroThroughNine=echo %number%
%zeroThroughNine%
此外,由于zerothouthnine已经是一个echo命令,因此不需要在它之前添加额外的echo

编辑:

考虑到你的随机计算是不必要的复杂,最终的代码应该是这样的(1-10除外):

重要的是,与其尝试在一行中完成所有操作,不如将其分成两行,这样可读性更强。

请查看。基本上,这是一个关于%random%环境变量如何工作的问题

编辑:

更详细地说,你的随机值总是7的原因是因为cmd的伪随机数生成器是如何工作的,而不是因为变量是如何解释的

本质上,在批处理文件的重复运行中,%RANDOM%将产生一个与上一次运行非常接近的值。因此,表达式
%RANDOM%*9/32768
在每次单独运行中都会产生相同的结果,因为随机值

如果我理解正确,您要问的问题是如何更好地生成包含0-9的随机值,这将通过使用以下表达式:

set /a zeroThroughNine=%RANDOM% %% 10
允许对进行评估,则有更多关于此技术的详细信息,在大多数情况下,更好的方法是使用

命令行(请注意,所有
%
百分号均为
^%
,并且
&
字符在一对
双引号内转义:

set "zeroThroughNine=call set /a number=^%Random^% ^% 10>nul & call echo number=^%number^%"
%zeroThroughNine%
for /L %G in (1, 1, 10) do @%zeroThroughNine%
批处理脚本,
调用
方法
(请注意,所有的
%
百分号都转义为
%
):

批处理脚本,
仅为输出启用DelayedExpansion

@echo OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
set "_zeroThroughNine=set /a _number=!Random! %% 10 & echo Number=!_number!"

SETLOCAL EnableDelayedExpansion
echo check variables 
set _
echo output
%_zeroThroughNine%
for /L %%G in (1,1,10) do %_zeroThroughNine%
echo check variables after evaluating 
set _
ENDLOCAL
ENDLOCAL
批处理脚本,
启用延迟扩展
脚本范围
(请注意,
感叹号转义为
^!
):


这不是一个答案,你只提到他的问题是重复的。这有点好,因为你做了搜索,他应该有一个好的点,虽然问题中的答案解释了为什么他每次的随机数是7。我不能同意你的说法,这不是一个答案,但可能是一个不完整的答案。也许这应该是一个评论原谅我,我是新来的。汤米,我有一个“矩阵”"bat文件,用于调整命令提示符的属性,使其在主题上与矩阵相似。在此bat文件中,是一个goto循环,用于触发对96个唯一变量的新计算,其中包含%random%环境变量和我的算法,然后是一个echo命令,该命令依次调用所有变量。结果是一个重复生成的96个从0到9的单位数的输出行。产生的效果隐约让人联想到矩阵。问题是,为了让它起作用,我必须手动写出每个变量。但这不是重点。当goto循环调用重写96个变量时,每个变量都会产生令人满意的随机数。I只是想知道如何在命令行上做同样的事情什么不起作用?我很乐意看看您是如何在上下文中使用它的,就像使用我的snippit一样。[他们两个都重复地产生相同的号码。昨天在我下班的时候,我告诉你它在工作。我只是很累lol。我看着它重复地产生相同的号码,出于某种原因,我很满意——其中一个时刻,比如当你试着把手机放进冰箱时:p
@echo OFF
SETLOCAL
set "_zeroThroughNine=call set /a _number=%%Random%% %%%% 10 & call echo number=%%_number%%"
echo check variables 
set _
echo output
%_zeroThroughNine%
for /L %%G in (1,1,10) do %_zeroThroughNine%
echo check variables after evaluating 
set _
ENDLOCAL
@echo OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
set "_zeroThroughNine=set /a _number=!Random! %% 10 & echo Number=!_number!"

SETLOCAL EnableDelayedExpansion
echo check variables 
set _
echo output
%_zeroThroughNine%
for /L %%G in (1,1,10) do %_zeroThroughNine%
echo check variables after evaluating 
set _
ENDLOCAL
ENDLOCAL
@echo OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
set "_zeroThroughNine=set /a _number=^!Random^! %% 10 & echo NUMBER=^!_number^!"
echo check variables 
set _
echo output
%_zeroThroughNine%
for /L %%G in (1,1,10) do %_zeroThroughNine%
echo check variables after evaluating 
set _
ENDLOCAL