如何从批处理文件生成随机Hex字符串?

时间:2016-10-16 01:14:34

标签: windows apache batch-file random cgi

朋友们,我正在尝试在我的网络服务器上生成随机十六进制字符串。我在Windows 10上使用Apache HTTPD。我使用十六进制字符串作为会话ID等。

到目前为止我尝试过的代码:

setlocal enabledelayedexpansion
set HESSTR=0123456789ABCDEF
set /a tempone="("%RANDOM%"*"16")"
set /a RANHEXS=tempone"/"32767
echo %RANHEXS%
set hexout=!HESSTR:~%RANHEXS%,1!
echo %hexout%
pause
endlocal

但是此代码始终会返回7 ...我做错了什么?

非常感谢!

2 个答案:

答案 0 :(得分:3)

这是一个创建随机十六进制数字的方法,该数字依赖于未记录的内置环境变量=ExitCode,它将退出代码作为8位十六进制数字返回:

rem // Set ErrorLevel and exit code to a random number:
cmd /C exit %RANDOM%
rem // Return the last digit of the hexadecimal exit code:
echo %=ExitCode:~-1%

请注意,退出代码可以从00000000到FFFFFFFF。然而,RANDOM的值涵盖0到32767的范围,即以十六进制表示法表示的0000到7FFF;因此,您最多可以使用最后三位数来构建一个3位十六进制数字。

答案 1 :(得分:2)

@Set /a num=%random% %% 16 + 1 
Echo %num% / 16

参见set /?。 %在C语言中定义为

  

余数运算符的结果是第一个操作数除以第二个

时的余数

我们需要使用其他%转义%%%

所以你将数字除以你想要的范围 - 所以165 %% 16 = 5(余数)。然后我们加1使其成为1到16,否则它将是0到15。

PS CMD异常是0-32767,大多数随机数介于0和1之间,然后乘以。这是来自VBScript的帮助 - Int((upperbound - lowerbound + 1) * Rnd + lowerbound)所以(16 - 1 + 1) * RandomNum + 1