Использование 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
он
- Идет в конец файла.
- Затем он возвращается к строке справа после
CALL :OMGSUB
и CALL :OMGSUB
"убегает" - Тогда это повторяет линию Вашей Мамы снова
- Затем он идет в конец файла и завершается
- Линия
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*
.