我在这里有一个很大的问题,我希望在这之间留出空间 数字消失了,我的意思是将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
答案 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之间的均匀分布,您可以使用以下内容在000
和999
之间授予统一分布:
: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