Нужен ли endlocal перед выходом? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующие «функции» в пакетных сценариях:

:myfunction
    setlocal
    set _variable=%*
    :: do something with %_variable%
    endlocal
    exit /B 0

Обратите внимание на пару setlocal / endlocol.

Требуется ли здесь endlocal?Или это избыточно?exit Завершает ли локализация неявно?

Бонусный вопрос : Можно ли ответить на этот вопрос без проверки поведения, например, со ссылкой на официальный источник?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

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

@Echo Off
Set "_variable="
Call :MyFunction "argument"
Set _variable
Pause
GoTo :EOF

:MyFunction
SetLocal
Set "_variable=%~1"
Exit /B 0

Если вы получили сообщениеEnvironment variable _variable not defined затем SetLocal был закрыт командой Exit, то есть Exit неявно завершил локализацию.

0 голосов
/ 06 июня 2018

Рассмотрим два пакетных файла, a.bat и b.bat.Пакетный файл a.bat вызывает b.bat, а также вызывает локальную подпрограмму :c.

   @echo off
   rem -------------
   rem This is a.bat
   rem -------------
   echo Outer A=%A%
   setlocal
   set A=Value_A
   echo Local A=%A%
   echo Calling b.bat
   call b.bat
   echo Back from b.bat
   echo A=%A%
   echo Calling subroutine :c
   call :c
   echo Back from subroutine :c
   echo A=%A%
   exit /b
:c
   setlocal
   set A=Value_C
   echo Inside subroutine :c A=%A%
   exit /b

   @echo off
   rem -------------
   rem This is b.bat
   rem -------------
   setlocal
   set A=Value_B
   echo Inside b.bat A=%A%

Запуск a.bat создает:

C> a.bat
Outer A=
Local A=Value_A
Calling b.bat
Inside b.bat A=Value_B
Back from b.bat
A=Value_A
Calling subroutine :c
Inside subroutine :c A=Value_C
Back from subroutine :c
A=Value_A

Обратите внимание, что endlocal в поле зрения нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...