Это на самом деле намного проще, чем кажется.
Чтобы преобразовать любые простые (не 32-битные) числа в число из ведущих нулей:
Просто вычтите разницу между вашим значением с помощью2 впереди минус ваше значение с одним впереди, от вашего значения с одним впереди.
т.е. 1 [ваше значение] - (2 [ваше значение] - 1 [ваше значение])
Чтобы преобразовать в начальные 0:
определить необходимые начальные 0, установить число, которое будет иметь это число 0 плюс его текущее значение, а затем выбрать последние N символов, означающие общее количество N цифр, которые вы хотите иметь.
т. Е. Для двухзначного суммарного пэда с 00, затем текущим значением и выберите последние две цифры.
Здесь проще продемонстрировать использование моей функции времени и некоторых простых функций для преобразования значений прикак:
@(SETLOCAL EnableDelayedExpansion
ECHO OFF
CALL :Get-DateTime
)
CALL :Main
( ENDLOCAL
EXIT /B
)
:Main
ECHO.Initial Values: HH = "%HH%" -- MN = "%MN%" -- SS = "%SS%"
CALL :Convert_To_Leading_Zero HH
CALL :Convert_To_Leading_Zero MN %MN%
CALL :Convert_To_Leading_Zero SS %SS%
ECHO.After Convert_To_Leading_Zero Values: HH = "%HH%" -- MN = "%MN%" -- SS = "%SS%"
CALL :Convert_To_Number HH
CALL :Convert_To_Number MN %MN%
CALL :Convert_To_Number SS %SS%
ECHO.Convert_To_Number: HH = "%HH%" -- MN = "%MN%" -- SS = "%SS%"
CALL :Convert_To_Leading_Zero HH
CALL :Convert_To_Leading_Zero MN %MN%
CALL :Convert_To_Leading_Zero SS
ECHO.After Convert_To_Leading_Zero Values: HH = "%HH%" -- MN = "%MN%" -- SS = "%SS%"
GOTO :EOF
:Convert_To_Leading_Zero
REM %1 -- Variable to Return
REM %2 -- Value to Convert IF EMpty Will try to use !%1! instead!
IF /I "%~2" NEQ "" (
SET "%~1=0%~2"
SET "%~1=!%~1:~-2,2!
) ELSE (
IF NOT DEFINED %~1 (
ECHO. Looks like you need to review your code.) ELSE (
SET "%~1=0!%~1!"
SET "%~1=!%~1:~-2,2!
)
)
GOTO :EOF
:Convert_To_Number
REM %1 -- Variable to Return
REM %2 -- Value to Convert IF EMpty Will try to use !%1! instead!
IF /I "%~2" NEQ "" (
SET /A "%~1=1%~2 - (2%~2 - 1%~2)"
) ELSE (
IF NOT DEFINED %~1 (
ECHO. Looks like you need to review your code.) ELSE (
SET /A "%~1=1!%~1! - (2!%~1! - 1!%~1!)"
)
)
GOTO :EOF
:Get-DateTime
FOR /F "Tokens=1-7 delims=MTWFSmtwfsouehrandit:-\/. " %%A IN ("%DATE% %TIME: =0%") DO (
FOR /F "Tokens=2-4 Skip=1 Delims=(-)" %%a IN ('ECHO.^| DATE') DO (
SET "%%~a=%%~A"
SET "%%~b=%%~B"
SET "%%~c=%%~C"
SET /a "#%%~a=1%%~A - (2%%~A-1%%~A)"
SET /a "#%%~b=1%%~B - (2%%~B-1%%~B)"
SET /a "#%%~c=1%%~C - (2%%~C-1%%~C)"
SET "HH=%%~D"
SET "Mn=%%~E"
SET "SS=%%~F"
SET "Ms=%%~G"
SET /a "#HH=1%%~D - (2%%~D-1%%~D)"
SET /a "#Mn=1%%~E - (2%%~E-1%%~E)"
SET /a "#SS=1%%~F - (2%%~F-1%%~F)"
SET /a "#Ms=1%%~G - (2%%~G-1%%~G)"
SET /a "#TMinutes=((1%%~D - (2%%~D-1%%~D))*60)+(1%%~E - (2%%~E-1%%~E))"
SET /a "#TSeconds=((((1%%~D - (2%%~D-1%%~D))*60)+(1%%~E - (2%%~E-1%%~E)))*60)+(1%%~F - (2%%~F-1%%~F))"
)
)
SET "TTime=%HH%.%Mn%.%SS%"
SET "IsoTime=%HH%.%Mn%.%SS%.%Ms%"
SET "TDate=%yy%-%mm%-%dd%"
SET "IsoDate=%yy%-%mm%-%dd%"
SET "IsoDateTime=%yy%-%mm%-%dd%_%HH%.%Mn%.%SS%.%Ms%"
GOTO :EOF
Это приводит к следующему:
C:\Users\Administrator>C:\Admin\S-O_Convert_Numbers.cmd
Initial Values: HH = "01" -- MN = "06" -- SS = "47"
After Convert_To_Leading_Zero Values: HH = "01" -- MN = "06" -- SS = "47"
Convert_To_Number: HH = "1" -- MN = "6" -- SS = "47"
After Convert_To_Leading_Zero Values: HH = "01" -- MN = "06" -- SS = "47"
C:\Users\Administrator>C:\Admin\S-O_Convert_Numbers.cmd
Initial Values: HH = "01" -- MN = "08" -- SS = "05"
After Convert_To_Leading_Zero Values: HH = "01" -- MN = "08" -- SS = "05"
Convert_To_Number: HH = "1" -- MN = "8" -- SS = "5"
After Convert_To_Leading_Zero Values: HH = "01" -- MN = "08" -- SS = "05"
C:\Users\Administrator>C:\Admin\S-O_Convert_Numbers.cmd
Initial Values: HH = "01" -- MN = "08" -- SS = "12"
After Convert_To_Leading_Zero Values: HH = "01" -- MN = "08" -- SS = "12"
Convert_To_Number: HH = "1" -- MN = "8" -- SS = "12"
After Convert_To_Leading_Zero Values: HH = "01" -- MN = "08" -- SS = "12"