1

Тема: CMD/BAT: конвертор из одной системы счисления в другую

Пример конвертора hex2dec, hex2bin и обратно (можно расширить под другие системы счисления) с поддержкой интерактивного режима. Так как в примере используются escape-последовательности, в системах < Win10 работать будет не совсем корректно.

@echo off
  if /i "%~1" equ "" if not defined run goto:box
  setlocal enabledelayedexpansion
    set "argc=-1" % rem : arguments counter
    for %%i in (%*) do set /a "argc+=1"
    if /i "%~1" equ "man" call:man %~2&goto:eof
    if !argc! neq 1 goto:err
    call:%*
  endlocal
exit /b

:err
  echo:=^>err
exit /b

:man
  if !argc! equ 0 (
    for %%i in (
      "%~n0 v1.00 - convert numbers into various number systems"
      "[Enter .c to clear output data or .q to exit]"
      "For hex numbers consisting only of dec numbers use "x" prefix."
      ""
      "Type"
      "   man [hex2bin|hex2dec]"
      "for the details."
    ) do echo:%%~i
  )
  if !argc! equ 1 (
    for /f "delims=:" %%i in (
      'findstr /birc:":%~1" "%~f0"'
    ) do set "#=%%~i"&&echo !#:; rem=-!
  )
exit /b

:hex2bin ; rem convert hex to bin and vice versa
  echo:%~1|>nul findstr /irc:"[a-f,x]"&&(
    2>nul (set /a "#=0%~1"||set /a "#=0x%~1")&&(
      for /l %%i in (1,1,32) do (
        set /a "b=#&1, #>>=1"
        set "bin=!b!!bin!"
      )
      set "#=%~1"&set "#=!#:~0,1!"
      for /f "delims=1" %%i in ("!bin!") do echo:%~1 = !bin:%%i=!
    )||goto:err
  )||(
    echo:%~1|>nul findstr /irc:"[2-9a-z]"&&goto:err
    set "bin=%~1"
    for /l %%i in (1,1,32) do (
      if defined bin (
        set /a "#=(#<<1)|!bin:~0,1!"
        set "bin=!bin:~1!"
      )
    )
    cmd /c exit /b !#!&echo:%~1 = 0x!=exitcode!
  )
exit /b

:hex2dec ; rem convert hex to dec and vice versa
  echo:%~1|>nul findstr /irc:"[a-f,x]"&&(
    2>nul (set /a "#=0%~1"||set /a "#=0x%~1")&&echo:%~1 = !#!||goto:err
  )||(
    echo:%~1|>nul findstr /irc:"[g-w,y,z]"&&goto:err
    cmd /c exit /b %~1&echo:%~1 = 0x!=exitcode!
  )
exit /b

:box
  setlocal
    set "run=true"
    :while
      set /p "i=>>> "
      cmd /c "%~f0" %i%
      if /i "%i%" equ ".c" cls
      if /i "%i%" equ ".q" goto:eof
      goto:while
  endlocal
exit /b