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
)
Суміш між стилями powerhell та 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
)
Щоб підкреслити, що це коментар (думав, що він не такий короткий):
@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
)