batch-file - 在 cmd.exe 批处理文件中格式化十六进制序列

标签 batch-file for-loop cmd hex string-formatting

在 Windows cmd 脚本(又名 bat 脚本)中,我有一个 FOR /L从 1 循环到 8,我需要 do a bit shift并以某种方式将变量格式化为十六进制数(如果您问的话,它是 feed into /AFFINITY 的单个 CPU 标识符位)。

我不知道如何执行最后一步。这是我的 loop.cmd 文件:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%i IN (1,1,8) DO (
    SET /A "J=1<<%%i"
    ECHO %%i and !J!
)

除了格式化十六进制数字之外,它可以执行所有操作:

1 and 2
2 and 4
3 and 8
4 and 16
5 and 32
6 and 64
7 and 128
8 and 256

预期输出是:

1 and 2
2 and 4
3 and 8
4 and 10
5 and 20
6 and 40
7 and 80
8 and 100

如何格式化十六进制数?

最佳答案

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /L %%i IN (1,1,8) DO (
    SET /A "J=1<<%%i"
    CALL :DECTOHEX J
    ECHO %%i and !J!
)
GOTO :EOF

:DECTOHEX VAR
SET "DEC=!%1!"
SET "HEX="
:NEXT
    SET /A DIGIT=DEC%%16, DEC/=16
    SET "HEX=%DIGIT%%HEX%"
IF %DEC% NEQ 0 GOTO NEXT
SET "%1=%HEX%"
EXIT /B

编辑:回复评论

当移位值只有一位时,先前的解决方案可以正常工作,如问题中所述。如果移位后的值可能有多个位,则需要进行更通用的十进制到十六进制的转换,如下所示:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

REM DEFINE THE HEXA DIGITS
SET "HEXA=0123456789ABCDEF"

FOR /L %%i IN (1,1,8) DO (
    SET /A "J=3<<%%i"
    CALL :DECTOHEX J
    ECHO %%i and !J!
)
GOTO :EOF

:DECTOHEX VAR
SET "DEC=!%1!"
SET "HEX="
:NEXT
    SET /A DIGIT=DEC%%16, DEC/=16
    SET "HEX=!HEXA:~%DIGIT%,1!%HEX%"
IF %DEC% NEQ 0 GOTO NEXT
SET "%1=%HEX%"
EXIT /B

关于batch-file - 在 cmd.exe 批处理文件中格式化十六进制序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32961479/

相关文章:

java - 奇怪的 .bat 文件行为

mysql - 运行批处理文件时隐藏命令控制台中显示的命令输出

javascript - "array.length -1"在 JavaScript 中是什么意思?

Java - 将 .txt 文件读取到 arrayList 忽略最后一次迭代并显示错误

windows - 对于 FOR 循环中的目录, “%~zI” 究竟扩展到了什么?

batch-file - 在 Windows 批处理文件中转义用户输入

batch-file - 批处理文件 - 找到某个单词后如何替换它?

windows - 命令的输入参数在批量编程时需要用户手动输入

javascript - 使用 on() 动态创建的 <li> 元素事件附加不起作用

windows - 批量合并 CSV 删除 header