如何组合数字变量

时间:2017-10-13 11:56:55

标签: windows batch-file variables

  

我在这里有一个很大的问题,我希望在这之间留出空间   数字消失了,我的意思是将3个数字放在一起(将它们组合起来而不是ADD)并使其仅为1个字符串。
有人可以查看我的代码,看看我能改进什么吗?我一直在尝试各种各样的事情,但最终在数字之间留有空格。

:start
REM Random numbers generator


:nr1
echo %RANDOM:~-1% > First.cdb
set /p first=<First.cdb


:nr2
echo %RANDOM:~-1% > Second.cdb
set /p second=<Second.cdb
if %second%==%first% goto :nr2


:nr3
echo %RANDOM:~-1% > Third.cdb
set /p third=<Third.cdb
if %third%==%first% (
goto :nr3
)
if %third%==%second% (
goto :nr3
)

:output
cls
echo Output
echo.
echo %first%%second%%third%


:combiner


pause
goto :start

输出应如下所示:

  

123   我觉得它看起来像这样:   1 2 3

2 个答案:

答案 0 :(得分:1)

简短回答:而不是echo %RANDOM:~-1% > First.cdb使用

> First.cdb echo %RANDOM:~-1%

但是,如果你想要一个介于000和999之间的随机数,你可以使用:

SET n=00%RANDOM%
SET n=%n:~-3%
ECHO %n%

更进一步:假设%RANDOM%遵循0到32767之间的均匀分布,您可以使用以下内容在000999之间授予统一分布:

:AVOID_BAD_NUMBER
SET N=00%RANDOM%
IF %N% GEQ 32000 GOTO:AVOID_BAD_NUMBER
SET n=%n:~-3%
ECHO %n%

0-767之间的数字可能比768-999更有可能!

答案 1 :(得分:1)

您的问题似乎是,当您首先不需要echo某个文件的任何内容时,您自己就echo了一个尾随空格。

以下内容可能会将变量%Num%的字符串值设置为由三个唯一数字组成的随机生成的字符串。

@Echo Off
SetLocal EnableDelayedExpansion
Set "Num="
:Loop
For %%A In (%RANDOM:~-1%) Do Echo("!Num!"|Find "%%A">Nul||Set "Num=!Num!%%A"
If 1%Num% Lss 1012 GoTo Loop
Echo(%Num%
Pause

修改

您可能会发现这个简单的示例,没有For循环更符合您的意图:

@Echo Off
Set "first=%RANDOM:~-1%"
:Loop1
Set "second=%RANDOM:~-1%"
If "%second%"=="%first%" GoTo Loop1
:Loop2
Set "third=%RANDOM:~-1%"
If Not "%third%"=="%second%" If Not "%third%"=="%first%" GoTo Result
GoTo Loop2
:Result
Echo(%first%%second%%third%
Pause