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

时间:2015-12-10 19:23:03

标签: windows variables random command-line command-prompt

我知道set zeroThroughNine=%Random%*9/32768后跟echo %zeroThroughNine%会产生一个0到9之间的随机数。但似乎解释器并没有评估变量的内容每次调用它时,echo %zeroThroughNine%每次都会产生7次。

我查找了一个使用变量运行命令的方法,以便我可以尝试强制它工作。我喜欢这个问题,因为它的方法非常基础; "如何使用变量运行命令?",适当标记。我没有太在意答案,因为它非常狭窄。最高投票和选择的答案是:

  

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

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

无论如何,我会停止抱怨。这就是我尝试过的:

  

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

不幸的是,我的SET命令的& echo %number%部分立即运行,产生" %number%"作为输出 - 并使用echo %zeroThroughNine%生成" set /a number=8436*9/32768",例如,作为输出。

所以有两个问题:如何通过使用变量(或一些替代方法)来普遍实现运行命令,也许更加紧迫,如何在命令行中使用每个新命令调用来生成新的随机数?

3 个答案:

答案 0 :(得分:1)

在将zeroThroughNine设置为命令之前,应该设置数字,如下所示:

set /a number=%Random%*9/32768
set zeroThroughNine=echo %number%
%zeroThroughNine%

此外,由于zeroThroughNine已经一个echo命令,因此您无需在它之前添加额外的回声。

编辑:

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

set /a number=%Random% %% 10
set zeroThroughNine=echo %number%
%zeroThroughNine%

重要的是,不是试图在一条线上完成所有操作,而是将其分成两部分,使其更具可读性。

答案 1 :(得分:0)

The CALL SET syntax允许对variable substring进行评估,CALL page有更多关于此技术的详细信息,在大多数情况下,更好的方法是使用Setlocal EnableDelayedExpansion < / em>的。

命令行(请注意,所有%百分号均为escaped ^%>&个字符在一对{{}内转义1}}双引号:

"

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

%%

批量脚本, @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 仅用于输出

EnableDelayedExpansion

批量脚本, @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 脚本范围(请注意,EnableDelayedExpansion感叹号会被转义为!):

^!

答案 2 :(得分:-1)

结帐this question。基本上,这是%random%环境变量如何工作的问题......

编辑:

详细说明,随机值始终为7的原因是因为cmd的伪随机数生成器的工作原理,而不是因为解释变量的方式。在this answer中很好地解释了这个问题。

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

如果我理解正确,你问的问题是如何更好地生成0到9的随机值,这可以通过使用以下表达式来实现:

set /a zeroThroughNine=%RANDOM% %% 10