windows - Hvordan viser jeg heltal i hexadecimal fra en batchfil?

Indlæg af Hanne Mølgaard Plasc

Problem



echo The error level is: \%ERRORLEVEL\%


producerer


>The error level is: 15


Hvad jeg gerne vil:


>The error level is: F


skal jeg foretage konverteringer eller er der en måde at vise tal forskelligt på?


Enhver hjælp i den rigtige retning er værdsat tak.

Bedste reference


Bare skriv det i vbscript i stedet for batch


læg vbscript-sætningen under i en fil.


WScript.Echo Hex( WScript.Arguments(0) )


derefter at køre det, simpelt skriv dette på kommandolinjen (i et batch script skal du bruge en for-loop til at indfange værdien, hvis det kræves)


C:workspace> cscript //nologo hex.vbs 15
F


Der er ingen grund til at installere noget. vbscript kommer som standard i de fleste windows systemer.

Andre referencer 1


Det var længe siden, jeg var meget ked af det.


cmdcalc.cmd


@echo off
    if not defined trace set trace=rem
    \%trace\% on
SetLocal
    if "\%1"=="/?" (
       call :help \%0
       goto :eof
    )
    Set MinInBase=
    if /i "\%2" EQU "Bin" call :DoBin \%1
    if /i "\%2" EQU "Hex" call :DoHex \%1
    If not defined BinStr call :DoDec \%1
EndLocal & set RET=\%RET\%
goto :eof


:DoBin
    Set MinInBase=2
    Set ShiftBy=1
    Set StartSyn=0b
    call :DoCalc \%1
goto :eof

:DoHex
    Set MinInBase=16
    Set ShiftBy=4
    Set StartSyn=0x
    call :DoCalc \%1
goto :eof


:DoDec
    if {\%1} EQU {} goto :eof
    set  /a BinStr=\%1
    set RET=\%BinStr\%
    echo \%RET\%
goto :eof


:DoCalc 
    Set BinStr= 
    SET /A A=\%1
    \%Trace\% \%A\%
:StartSplit
    SET /A B="A>>\%ShiftBy\%"
    \%Trace\% \%B\%
    SET /A C="B<<\%ShiftBy\%"
    \%Trace\% \%C\%
    SET /A C=A-C
    \%Trace\% \%C\%
    call :StringIt \%C\%
    If \%B\% LSS \%MinInBase\% goto :EndSplit 
    set A=\%B\%
goto :StartSplit    
:EndSplit
    call :StringIt \%B\%
    set RET=\%StartSyn\%\%BinStr\%
    Echo \%RET\%
EndLocal & set RET=\%RET\%
goto :eof


:StringIt
    set Bin=0123456789ABCDEF
    FOR /F "tokens=*" \%\%A in ('echo "\%\%BIN:~\%1,1\%\%"') do set RET=\%\%A
    set ret=\%ret:"=\%
    Set BinStr=\%Ret\%\%BinStr\%
goto :eof

:help
    echo \%1 syntax:
    echo.
    echo \%1 Calculation [Hex^|Bin]
    echo.
    echo eg \%1 12*2 Hex
    echo.
    echo gives 0x18.
goto :eof

Andre referencer 2


Ifølge den eksterne ressource Windows Miljøvariabler er der en ukodificeret indbygget skrivebeskyttet variabel =ExitCode, som returnerer den nuværende exitkode i hexadecimalt format. For at sikre at værdien ErrorLevel svarer til exitkode, brug cmd /C exit \%ErrorLevel\%. [17]


Så hvis du bruger denne linjekode ...:


cmd /C exit \%ErrorLevel\%
echo The error level is: \%=ExitCode\%


... du vil modtage dette (forudsat at ErrorLevel er 15):



The error level is: 0000000F



For at slippe af med de førende nuller, brug dette ...:


cmd /C exit \%ErrorLevel\%
for /F "tokens=* delims=0" \%\%Z in ("=ExitCode\%") do set "HEXCODE=\%\%Z"
if not defined HEXCODE set "HEXCODE=0"
echo The error level is: \%=ExitCode\%


... for at få dette:



The error level is: F


Andre referencer 3


perl -e"printf qq{The errorlevel is: \%X
}, $ENV{ERRORLEVEL}"


Kræver Perl at blive installeret, selvfølgelig, men det er nemt at gøre. [18]