Batch file 无效号码。数字的精度限制为32位
我有下面的批处理脚本,它根据一些事情来计算一个数字,这是一个相当大的数字,但是,这是它应该生成的(示例)76561197960287930Batch file 无效号码。数字的精度限制为32位,batch-file,Batch File,我有下面的批处理脚本,它根据一些事情来计算一个数字,这是一个相当大的数字,但是,这是它应该生成的(示例)76561197960287930 @echo off if NOT %1a == a goto recurse reg query HKCU\Software\Valve\Steam\Users > users.tmp echo. echo for /f "skip=1 delims=\ tokens=6" %%i in (users.tmp) do call %0 %%i d
@echo off
if NOT %1a == a goto recurse
reg query HKCU\Software\Valve\Steam\Users > users.tmp
echo.
echo
for /f "skip=1 delims=\ tokens=6" %%i in (users.tmp) do call %0 %%i
del users.tmp
echo
pause>nul
goto end
:recurse
set SID=%1
set /A SID=SID/2
set /A SID1=SID*2
set STEAMBIT=0
if NOT %SID1% == %1 set STEAMBIT=1
echo UserID: %SID%
echo %SID% > userid.txt
SET /A Result = ( %SID% * 2 ) + ( %STEAMBIT% + 76561197960265728 )
echo %result% > useridresult.txt
goto end
:end
exit
是否有修复和/或解决方法?感谢在“32位精度”中可以管理的最大正数是2147483647(通过set/A 0x7FFFFFFF
获得),因此,如果您想使用更多的数字执行操作,只需根据所需的操作,在适当大小的块中拆分最大位数。例如,如果要执行乘法,则将大数分成4位一组(因为9999999999适合32位,而99999999不适合)。您可以在查看此方法的进一步说明
但是,这个问题非常简单:您只需要将一个大的(17位)数字添加到另一个数字上,这样就可以在每个9位数字的两部分中获得结果:
@echo off
setlocal
set SID=%1
set /A "STEAMBIT=SID&1, SID=SID/2"
echo UserID: %SID% SteamBit: %STEAMBIT%
SET /A Low = ( %SID% * 2 ) + ( %STEAMBIT% + 960265728 ), High = Low / 1000000000 + 76561197
echo Result: %High%%Low:~-9%
此方法对Set/A文档中最多为
999999999
的SID号提供正确的结果:这些数字必须都在32位有符号整数(-2147483648到2147483647)的范围内,才能使用PowerShell或VBScript处理较大的数字。谢谢,我们将尝试此方法!