BugTraq.Ru
Русский BugTraq
https://bugtraq.ru/forum/faq/sysadmin/cmdfeature.html

Обработка чисел с лидирующими нулями в командном процессоре cmd.exe
Den
Опубликовано: Den, 04.10.05 20:19

Случайно обнаружился интересный глюк в cmd.exe на MS Windows 2000 Server, проявляющийся при попытке произвести арифметическую операцию с двузначными и более числами, предваренными лидирующими нолями, с последующим присвоением переменной окружения.

Попробуйте:
set /a test=0054-1
set /a test=0111
set /a test=4*0110

С подобным глюком можно легко столкнуться при конвертировании каких-либо данных в числовой формат с помещением результата в переменную окружения для последующей обработки в скрипте.

Причина - правила интерпретации числовых констант, которые могут быть либо десятичными (17), либо шестнадцатиричными (0x11), либо восьмиричными (021).

WORKAROUND:
Глюка можно обойти, если использовать следующее выражение для отбрасывания лидирующих нолей:
for /F "tokens=* delims=0" %i in ("0110") do set /a test=4*%i



обсудить  |  все отзывы (15)

[7115]



  Copyright © 2001-2021 Dmitry Leonov Design: Vadim Derkach