Вы должны переместить свой блок :Result
за пределы блоков if (чуть выше: например, END будет подходящим местом; просто поместите goto End
перед блоком :Result
, чтобы избежать нежелательного попадания в него). И затем call :Result
не goto Result
внутри блока if.
Для дальнейшей документации выполните call /?
в командной строке (и, возможно, goto /?
для справки). Это работает и со всеми другими командами, например, set /?
, if /?
и т. Д.
Поскольку я не вижу, где вы установите значение VAR
, ваше текущее состояние if defined VAR
всегда будет быть ложным Поэтому я думаю, что ваш сценарий нуждается в большей заботе, чем перемещение блока Result. Или это просто упрощенный пример, тогда не берите в голову;)
Возможно, поставьте echo %VAR%
перед условием if для отладки и убедитесь, что есть значение.
Для целей отладки попробуйте @ECHO ON
в первой строке. Это дает вам все шаги, которые выполняет ваш пакетный файл, и помогает находить ошибки.
Обновление после второго обновления кода:
Попробуйте такую структуру:
[...]
goto eof
:Result
... your result block here
goto eof
[...]
:eof
С это защищает ваш: Result блок от выполнения, когда интерпретатор просто работает сверху вниз.
Также я бы предложил не использовать цепочки амперсандов (&
). Предпочитайте одну команду в каждой строке, если это возможно.
Вы пропустили добавление всех символов %
. Код, который вы разместили, просто не имеет никакого смысла без них.
Также кажется, что вы полностью удалили блок: Result, но вы все еще называете его ...
Я в замешательстве.
Пожалуйста, проверьте другие источники помощи, например, www.ss64.com (CMD) и некоторые учебные пособия. Я не буду обновлять свой ответ в другой раз, извините. Этот вопрос все равно был закрыт.