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