在 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/