Как отобразить целые числа в шестнадцатеричном формате из командного файла? - PullRequest
1 голос
/ 21 апреля 2011
echo The error level is: %ERRORLEVEL%

Производит

>The error level is: 15

Что бы я хотел:

>The error level is: F

мне нужно делать преобразования или есть способ отображать числа по-другому?

Любая помощь в правильном направлении приветствуется, спасибо.

Ответы [ 4 ]

9 голосов
/ 21 апреля 2011

Это было очень давно, мне было очень скучно.

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
6 голосов
/ 24 июня 2016

Согласно внешнему ресурсу Переменные среды Windows , существует недокументированная встроенная переменная только для чтения =ExitCode, которая возвращает текущий код выхода в шестнадцатеричном формате.Чтобы убедиться, что значение ErrorLevel равно коду выхода, используйте cmd /C exit %ErrorLevel%.

. Поэтому, если вы используете этот код строки ...:

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

... вы получитеэто (предположим, что ErrorLevel равно 15):

The error level is: 0000000F

Чтобы избавиться от ведущих нулей, используйте это ...:

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%

... чтобы получить это:

The error level is: F
2 голосов
/ 21 апреля 2011

Просто запишите его в vbscript вместо пакета

поместите приведенный ниже оператор vbscript в файл.

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

затем, чтобы запустить его, просто введите его в командной строке (впакетный сценарий, используйте цикл for для захвата значения при необходимости)

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

Нет необходимости устанавливать что-либо.vbscript поставляется по умолчанию в большинстве систем Windows.

0 голосов
/ 21 апреля 2011
perl -e"printf qq{The errorlevel is: %X\n}, $ENV{ERRORLEVEL}"

Требуется Perl для установки, конечно, но это легко сделать.

...