break||(
code that cannot contain non paired closing bracket
)
Хотя это goto
решение является хорошим вариантом, оно не будет работать в квадратных скобках (включая команды FOR и IF), но это будет. Хотя вы должны быть осторожны закрывающих скобок и неправильного синтаксиса для FOR
и IF
команд , так как они будут обрабатываться.
Обновить
Обновление в ответе dbenham дало мне несколько идей. Во-первых, есть два разных случая, когда нам могут понадобиться многострочные комментарии - в контексте скобок, где GOTO нельзя использовать, и вне его. Внутри скобок контекста мы можем использовать другие скобки , если есть условие , которое предотвращает код будет executed.Though код thede по- прежнему будет проанализирован и будут обнаружены некоторые синтаксические ошибки ( FOR
, IF
, неправильно закрытые скобки, неправильное расширение параметра ..). Таким образом , если есть возможность, лучше использовать GOTO.
Хотя невозможно создать макрос / переменную, используемую в качестве метки, но можно использовать макросы для комментариев в скобках. Тем не менее, можно использовать два трюка, чтобы сделать комментарии GOTO более симметричными и более приятными (по крайней мере, для меня). Для этого я использую два трюка: 1) вы можете поместить один символ перед меткой, и goto все равно сможет его найти (я понятия не имею, почему это так. Я думаю, он ищет диск). 2) вы можете поставить одиночный :
символ в конце имени переменной, и функция замены / подстановки не будет активирована (даже при включенных расширениях). Это в сочетании с макросами для комментариев в скобках может сделать оба случая почти одинаковыми.
Итак, вот примеры (в том порядке, в котором они мне нравятся больше всего):
С прямоугольными скобками :
@echo off
::GOTO comment macro
set "[:=goto :]%%"
::brackets comment macros
set "[=rem/||(" & set "]=)"
::testing
echo not commented 1
%[:%
multi
line
comment outside of brackets
%:]%
echo not commented 2
%[:%
second multi
line
comment outside of brackets
%:]%
::GOTO macro cannot be used inside for
for %%a in (first second) do (
echo first not commented line of the %%a execution
%[%
multi line
comment
%]%
echo second not commented line of the %%a execution
)
С фигурными скобками :
@echo off
::GOTO comment macro
set "{:=goto :}%%"
::brackets comment macros
set "{=rem/||(" & set "}=)"
::testing
echo not commented 1
%{:%
multi
line
comment outside of brackets
%:}%
echo not commented 2
%{:%
second multi
line
comment outside of brackets
%:}%
::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
echo first not commented line of the %%a execution
%{%
multi line
comment
%}%
echo second not commented line of the %%a execution
)
В скобках :
@echo off
::GOTO comment macro
set "(:=goto :)%%"
::brackets comment macros
set "(=rem/||(" & set ")=)"
::testing
echo not commented 1
%(:%
multi
line
comment outside of brackets
%:)%
echo not commented 2
%(:%
second multi
line
comment outside of brackets
%:)%
::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
echo first not commented line of the %%a execution
%(%
multi line
comment
%)%
echo second not commented line of the %%a execution
)
Смесь между стилями powershell и C ( <
не может использоваться, потому что перенаправление с более высоким приоритетом. *
Не может использоваться из-за %*
):
@echo off
::GOTO comment macro
set "/#:=goto :#/%%"
::brackets comment macros
set "/#=rem/||(" & set "#/=)"
::testing
echo not commented 1
%/#:%
multi
line
comment outside of brackets
%:#/%
echo not commented 2
%/#:%
second multi
line
comment outside of brackets
%:#/%
::GOTO macro cannot be used inside for loop
for %%a in (first second) do (
echo first not commented line of the %%a execution
%/#%
multi line
comment
%#/%
echo second not commented line of the %%a execution
)
Чтобы emphase это комментарий (мысль не так коротка):
@echo off
::GOTO comment macro
set "REM{:=goto :}REM%%"
::brackets comment macros
set "REM{=rem/||(" & set "}REM=)"
::testing
echo not commented 1
%REM{:%
multi
line
comment outside of brackets
%:}REM%
echo not commented 2
%REM{:%
second multi
line
comment outside of brackets
%:}REM%
::GOTO macro cannot be used inside for
for %%a in (first second) do (
echo first not commented line of the %%a execution
%REM{%
multi line
comment
%}REM%
echo second not commented line of the %%a execution
)