И не только в win2000, также "прекрасно" работает и в ХР :-)12.10.05 14:09 Число просмотров: 1874 Автор: Nemetc Статус: Незарегистрированный пользователь
Случайно обнаружился интересный глюк в 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
Так как cmd.exe скорее всего написан на C, и числа соответственно читаются чем нибудь вроде scanf-а (или atoi если число в текстовом предварительно считано в память), то и их интерпретация сишная
Спасибо. Уже понял где собака M$ порылась.05.10.05 12:57 Автор: Den <Денис Т.> Статус: The Elderman
Это скорее стоит оформить как текст в faq, для новостной ленты не очень подходит.
Зачем грохать? ИМХО, лучше тогда уж переместить, например, в sysadmin или operating systems.04.10.05 22:47 Автор: fly4life <Александр Кузнецов> Статус: Elderman Отредактировано 04.10.05 22:53 Количество правок: 2
> Баг в командном процессоре cmd.exe > > > > Случайно обнаружился интересный глюк в cmd.exe на MS > Windows 2000 Server, проявляющийся при попытке произвести > арифметическую операцию с двузначными и более числами, > предваренными лидирующими нолями, с последующим присвоением > переменной окружения.
Это не баг, не глюк, а фича:
С:\>set /a test=008
Invalid number. Numeric constants are either decimal (17),
hexadecimal (0x11), or octal (021).
---
Нифига себе фича!... :)) Ты когда последний раз пользовался восьмеричным исчислением?05.10.05 12:40 Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 05.10.05 12:58 Количество правок: 1