在Windows批处理文件中,如何使用十进制数的十六进制表示设置环境变量?

Rob*_*ner 2 hex batch-file environment-variables

使用Windows set/p并设置/ a命令从命令行接受十六进制值并将其转换为十进制.我需要的是能够采用十进制值和设置和环境变量与其十六进制等效.

当前批处理文件编码:

@echo off
set HexV1=%1
set HexV2=%2
set /A DecV1=0x%HexV1%
set /A DecV2=0x%HexV2%
set /A HexV3=0x%HexV1% + 0x1
set /A HexV4=0x%Hexv2% + 0x2
set Dec
set Hex
Run Code Online (Sandbox Code Playgroud)

生产:

C:>hexmath a f
DecV1=10
DecV2=15
HexV1=a
HexV2=f
HexV3=11
HexV4=17
Run Code Online (Sandbox Code Playgroud)

我需要的是能够设置HexV3为b和HexV411.

有什么建议?

ijp*_*est 6

channel9上的批处理文件很适合我的口味.这是一个更简单的(IMO)版本的"tohex.bat",我刚刚掀起:

@echo off & setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set LOOKUP=0123456789abcdef &set HEXSTR=&set PREFIX=
if "%1"=="" echo 0&goto :EOF
set /a A=%*
if !A! LSS 0 set /a A=0xfffffff + !A! + 1 & set PREFIX=f
:loop
set /a B=!A! %% 16 & set /a A=!A! / 16
set HEXSTR=!LOOKUP:~%B%,1!%HEXSTR%
if %A% GTR 0 goto :loop
echo %PREFIX%%HEXSTR%
Run Code Online (Sandbox Code Playgroud)

它的工作方式与其他脚本的工作方式大致相同(迭代除以16),但它使用字符串查找(而不是一系列"if"语句)来构建十六进制字符串.它也处理负数(两个补码),但它有点像黑客.

您可以从其他批处理文件中调用它,如下所示:

for /f "delims=" %%Q IN ('call tohex.bat 0x%HexV1% + 0x1') DO SET HexV3=%%Q
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.