Подтвердить что ты не робот

Удалить начальные нули в пакетном файле

В моем приложении я получаю число, имеющее начальные нули. Я пытаюсь обрезать ведущие нули и получить фактическое число. Я попытался использовать переключатель /a, который рассматривает правую часть задания как арифметическое выражение. Поэтому я попробовал:

SET /a N = 00027

Вышеприведенный результат дал 23, который является десятичным эквивалентом восьмеричного числа 27. Затем я нашел это решение в Интернете.

SET N = 00027
SET /a N = 1%N%-(11%N%-1%N%)/10

Кажется, что он работает и дает результат 27. Есть ли более простой способ обрезать ведущие нули в пакетном файле?

4b9b3361

Ответ 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