--------------------------------------------------------------------------------------------------
Но если нельзя, а очень хочется.... Мне известны два способа ( извращения? ), как обойти это ограничение.
Итак, способ первый. Он основан на том, что команда exit может возвращать целочисленное значение в качестве кода возврата.
Таким образом можно возвращать целое 32-битное число со знаком, т.е. от -2147483648 до 2147483647 Если процедура завершается оператором
(Параметр /b - обязателен!), то в теле основной программы это значение можно получить из переменной %errorlevel%. Полный пример имитации функции может выглядеть так:
Второй способ моделирования функции в bat/cmd файлах.
В качестве переменной для записи результата создается переменная с именем процедуры.
Функции в bat/cmd файлах.
В командном процессоре не предусмотрено использование функций.Но если нельзя, а очень хочется.... Мне известны два способа ( извращения? ), как обойти это ограничение.
Итак, способ первый. Он основан на том, что команда exit может возвращать целочисленное значение в качестве кода возврата.
Таким образом можно возвращать целое 32-битное число со знаком, т.е. от -2147483648 до 2147483647 Если процедура завершается оператором
exit /b %result%
(Параметр /b - обязателен!), то в теле основной программы это значение можно получить из переменной %errorlevel%. Полный пример имитации функции может выглядеть так:
@echo off
setlocal enableextensions
set /a i=2
call :sqr %i%
echo %i%^^2 = %errorlevel%
pause
endlocal
exit /b 0
:sqr
setlocal
set /a result=%1*%1
endlocal & exit /b %result%
Второй способ моделирования функции в bat/cmd файлах.
В качестве переменной для записи результата создается переменная с именем процедуры.
@echo off
setlocal enableextensions enabledelayedexpansion
set /a i=3
call :sqr %i%
echo %i%^^2 = %sqr%
pause
endlocal
exit /b 0
:sqr
setlocal enableextensions enabledelayedexpansion
set out=%~0
set /a result = %~1 * %~1
endlocal & set %out:~1%=%result%
exit /b
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).