Удалить начальные нули в пакетном файле
В моем приложении я получаю число, имеющее начальные нули. Я пытаюсь обрезать ведущие нули и получить фактическое число. Я попытался использовать переключатель /a
, который рассматривает правую часть задания как арифметическое выражение. Поэтому я попробовал:
SET /a N = 00027
Вышеприведенный результат дал 23, который является десятичным эквивалентом восьмеричного числа 27. Затем я нашел это решение в Интернете.
SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10
Кажется, что он работает и дает результат 27. Есть ли более простой способ обрезать ведущие нули в пакетном файле?
Ответы
Ответ 1
Метод, который вы нашли, очень хорош. Он поддерживает номера до 99 999 999 и очень быстро.
Существует более простой способ использовать SET/A, который работает с числами до 9999. Он использует операцию модуля. Метод не может быть расширен до больших чисел.
set n=0027
set /a n=10000%n% %% 10000
Метод FOR/F, который опубликовал Дейл, работает с "любым" размером (до 8191 цифр). Однако для обработки нулевых значений требуется чуть больше работы.
set n=000000000000000000000000000000000000000000000000000027
for /f "tokens=* delims=0" %%N in ("%n%") do set "n=%%N"
if not defined n set "n=0"
Ответ 2
Вы можете использовать FOR /F
для удаления ведущих нулей.
C:\>SET n=00030
echo off
for /f "tokens=* delims=0" %a in ("%n%") DO echo %a
30
Как вы можете видеть, для параметра delims
установлено значение 0. Это сделает 0 в качестве разделителя. В то же время с tokens
of *
это гарантирует, что ведущее 0 будет удалено, пока остальная часть строки будет обработана (включая завершение 0).
Вы можете обратиться к этой ссылке для получения дополнительной информации об удалении ведущих 0.
P.S. Не забудьте использовать %%a
вместо %a
, когда вы запускаете пакетный файл в FOR /F
.
Ответ 3
Команда exit довольно хороша при очистке ведущих нулей:
>set n=0000890
>cmd /c exit /b %n%
>echo %errorlevel%
890
С этим вы можете использовать число до 32-битного целочисленного предела, а часть кода очень мала, несмотря на то, что дополнительный вызов cmd.exe может повредить производительность.
Ответ 4
Если это только вопрос удаления всех нулей, вы можете сделать это следующим образом:
> SET n=00000002304650620000.23094400
> SET n=%n:0=%
2346562.23944