@echo off
echo lol testing
pause
@echo off
Setlocal EnableDelayedExpansion
Set _RNDLength=8
Set _Alphanumeric=0123456789ABCDEF
Set _Str=%_Alphanumeric%987654321
:_LenLoop
IF NOT "%_Str:~18%"=="" SET _Str=%_Str:~9%& SET /A _Len+=9& GOTO :_LenLoop
SET _tmp=%_Str:~9,1%
SET /A _Len=_Len+_tmp
Set _count=0
SET _RndAlphaNum=
SET :_loop
:_loop
Set /a _count+=1
SET _RND=%Random%
Set /A _RND=_RND%%%_Len%
SET _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
If !_count! lss %_RNDLength% goto :_loop
Set _RNDZLength=4
SET _RNDZ=%Random%
SET _RndAlphaNumz=
:_loop
SET _RndAlphaNumz=!_RndAlphaNumz!!_Alphanumeric:~%_RNDZ%,1!
If !_count! lss %_RNDZLength% goto _loop
Set _RNDZALength=4
SET _RNDZA=%Random%
SET _RndAlphaNumez=!_RndAlphaNumez!!_Alphanumeric:~%_RNDZA%,1!
If !_count! lss %_RNDZALength% goto _loop
Set _RNDZADLength=4
SET _RNDZAD=%Random%
SET _RndAlphaNumedz=!_RndAlphaNumedz!!_Alphanumeric:~%_RNDZAD%,1!
If !_count! lss %_RNDZALength% goto _loop
Set _RNDZADALength=12
SET _RNDZADA=%Random%
SET _RndAlphaNumedaz=!_RndAlphaNumedaz!!_Alphanumeric:~%_RNDZADA%,1!
If !_count! lss %_RNDZALength% goto _loop
echo !_RndAlphaNum!-!_RndAlphaNumz!
pause这是我的代码(我知道只有2个变量在回显中),我试图让它打印8-4-4- 12,尝试了很多东西,有人能帮上忙吗?我从我制作的4-4生成器中复制了代码,但我将代码从4改为8,在上面运行了大约2个小时,试图找出出了什么问题,但没有找到。
发布于 2022-05-22 02:33:13
对我来说,这就像是一个XY问题。如果您想要生成GUID,就会有也许更容易的方法。
但是如果你更喜欢重新发明轮子,那么我建议使用一个批处理函数来产生你的随机性,这将是一个比你的降落伞和梯子代码更干净的解决方案。就像这样:
@echo off & setlocal disabledelayedexpansion
call :rndhex 8 group[0]
call :rndhex 4 group[1]
call :rndhex 4 group[2]
call :rndhex 4 group[3]
call :rndhex 12 group[4]
echo %group[0]%-%group[1]%-%group[2]%-%group[3]%-%group[4]%
exit /b
:rndhex <length> <return_var>
setlocal enabledelayedexpansion
for %%I in (
"0=0" "1=1" "2=2" "3=3" "4=4" "5=5" "6=6" "7=7" "8=8"
"9=9" "10=A" "11=B" "12=C" "13=D" "14=E" "15=F"
) do set %%I
for /L %%I in (1,1,%~1) do (
set /a "digit = !random! * 16 / 32768"
for %%A in (!digit!) do set "hex=!%%A!!hex!"
)
endlocal & set "%~2=%hex%"
exit /bhttps://stackoverflow.com/questions/72331711
复制相似问题