1

Тема: CMD/BAT: возврат значений из процедур через параметры

Я извиняюсь за создание новой темы, но у меня нет прав писать в форуме forum.script-coding.com/viewtopic.php?pid=20814

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

Сам я раньше использовал несколько иной способ возврата значений из функций, думаю, что он имеет право на жизнь, как третий вариант:

@ echo off
set /p a=Enter a: 
call :sqr %a%
echo %a%^^2 = %errorlevel%
pause
exit /b

:sqr
:: Квадрат числа %1
setlocal
set /a result=%1*%1
endlocal & exit /b %result%

Т.е. возвращаем значение через %errorlevel%. Единственное ограничение такого способа: результат работы функции должен быть целочисленным.

Если модераторы сочтут нужным, то было бы неплохо добавить в ту тему третий способ.

P.S. У меня есть и много других интересных идей с бат-файлами, если это кому-то нужно, буду ими делиться в этом разделе.

2

Re: CMD/BAT: возврат значений из процедур через параметры

Извинятся не за что, всё правильно.
Я тоже думаю, что такой подход имеет право на жизнь.
Добавлять в ту тему имеют право не только модераторы, но и любые участники со статусом «разработчик».
Если не будет возражений или этого не сделает кто-то другой раньше, то через пару дней добавлю.

Arigato пишет:

P.S. У меня есть и много других интересных идей с бат-файлами, если это кому-то нужно, буду ими делиться в этом разделе.

Конечно нужно!

3 (изменено: wisgest, 2012-12-16 19:31:50)

Re: CMD/BAT: возврат значений из процедур через параметры

Насколько я могу судить через %errorlevel% можно возвратить 32-битное целое число со знаком, т.е. от -2147483648  до 2147483647
(если указать значение между 2147483648 и 4294967295 то оно будет преобразованно к отрицательному от -2147483648 до -1,
а если между -4294967295 и -2147483649, то к положительному от 1 до 2147483647).
Если выйти за диапозон -4294967295..4294967295, то выводится сообщение об ошибке:

Неверное число. Числа ограничены 32 битами точности.

значение %errorlevel% не изменяется, но возврат по EXIT /B происходит.

4

Re: CMD/BAT: возврат значений из процедур через параметры

Т. к. возражений не было, добавил.
Что нибудь поправить?

----------------

wisgest пишет:

Если выйти за диапозон -4294967295..4294967295, то выводится сообщение об ошибке…

Как я понял, ошибка возникает не в EXIT /B — после него можно указать любое целое десятичное число, оно будет лишь преобразованно к указанному диапазону (вероятно, по модулю 0x100000000). По-видимому, ошибка возникала в SET /A (я для простоты душевной использовал шестнадцатеричные значения, а т.к. после EXIT /B можно указать лишь десятичное, преобразовывал их через SET /A.)

5

Re: CMD/BAT: возврат значений из процедур через параметры

wisgest пишет:

Что нибудь поправить?

По-моему — нормально.