Ответ 1
У вас две проблемы.
Одна проблема заключается в том, что goto разбивает цикл for. Другие, ярлыки в скобках довольно сложны.
goto всегда ломается и все вложенные циклы, даже если метка goto находится в одном блоке, а переменные for теряются сразу после перехода.
В круглых скобках ориентированы "две линии"! Я экспериментировал с метками и вот некоторые результаты для скобок.
Когда появляется метка, следующая строка должна быть в правильном формате для "вторичной" линии.
Вот почему это не удается.
(
:this label fails with a syntax error
)
(
:this works
:because this line is a "legal" secondary line
)
(
:: The remark style
:: fails, because it not "legal" to use a double colon, because it not a legal path (in the most cases)
)
(
:and now I got courious & echo This will not echo'd
:but & echo You can see this !
)
Во второй строке пропускаются некоторые шаги парсинга.
@
не работает, @echo Hello
пытается запустить файл с именем @echo.bat
.
Разбиение скобок не выполняется, как в echo( hello
.
Ярлыки обрабатываются как имя файла, :echo
проверяет только, если :echo
является допустимым именем файла, а затем пропускает эту часть.
::hello
поиск на диске ::
.
Для целей тестирования привод ::
может быть создан с помощью subst :: c:\temp
.
Поскольку ярлыки просто игнорируются во второй строке, работают амперсанды, а также трубы, но файл на ::
должен существовать.
(
echo @echo This is %~f0
) > %TEMP%\testLabel.bat
REM create Drive ::
subst :: %temp%
(
:Label
::\testLabel.bat The bat will not be executed | echo But this
)
subst /D ::