Использование CALL для меток в пакете script

При использовании команды CALL для вызова метки в пакете script, и вы завершаете подпрограмму с помощью GOTO: eof, что происходит оттуда? Возвращает ли он обратно туда, где находится подпрограмма CALL? Или он продолжается после местоположения вызова script?

Например:

ECHO It for my college fund.
CALL :OMGSUB
ECHO *runs away and cries like a little girl*

:OMGSUB
ECHO Your mom goes to college.
GOTO:eof

ECHO *picks up jewelry box*

После GOTO: какая строка будет отображаться дальше?

Ответ 1

Почему бы просто не запустить его и убедиться в этом? Я сохранил твой сценарий в командном файле с именем foo.bat, и я изменил, что Your mom goes to college. иметь echo впереди.

C:\temp>foo

C:\temp>ECHO It for my college fund.
It for my college fund.

C:\temp>CALL :OMGSUB

C:\temp>echo Your mom goes to college.
Your mom goes to college.

C:\temp>GOTO:eof

C:\temp>ECHO *runs away and cries like a little girl*
*runs away and cries like a little girl*

C:\temp>echo Your mom goes to college.
Your mom goes to college.

C:\temp>GOTO:eof

C:\temp>

Так что легко увидеть, что после OMGSUB он

  1. Идет в конец файла.
  2. Затем он возвращается к строке справа после CALL :OMGSUB и CALL :OMGSUB "убегает"
  3. Тогда это повторяет линию Вашей Мамы снова
  4. Затем он идет в конец файла и завершается
  5. Линия echo *picks up jewewlry box* никогда не достигается.

Ответ 2

GOTO:eof завершает подпрограмму OMGSUB в вашем командном файле. Так что ECHO *runs away and cries like a little girl* выполняет в следующий раз, но ECHO Your mom goes to college. также выполнит снова.

Sidenote, который также был комментарием:

Вы можете заменить GOTO:eof на exit/b. Кроме того, ECHO Your mom goes to college. будет казнен после того, как ECHO *runs away and cries like a little girl*, что может быть не предназначено. Решением было бы добавить exit после того, как ECHO *runs away and cries like a little girl*.