break||(
code that cannot contain non paired closing bracket
)
Die goto
Lösung ist zwar eine gute Option, funktioniert jedoch nicht in Klammern (einschließlich FOR- und IF-Befehlen). Dies ist jedoch der Fall. Sie sollten jedoch vorsichtig sein, wenn Sie Klammern und ungültige Syntax für FOR
und IF
Befehle schließen, da diese analysiert werden.
Aktualisieren
Das Update in der Antwort des Dbenham gab mir einige Ideen. Erstens - es gibt zwei verschiedene Fälle, in denen wir mehrzeilige Kommentare benötigen können - im Kontext einer Klammer, in der GOTO nicht verwendet werden kann, und außerhalb davon. In Klammern Kontext können wir weitere Klammern verwenden , wenn es eine Bedingung ist , die den Code verhindert , dass der Code thede sein executed.Though wird noch analysiert werden , und einige Syntaxfehler erkannt werden ( FOR
, IF
, nicht ordnungsgemäß geschlossene Klammern, falsche Parameter Expansion ..). So Wenn es möglich ist, ist es besser, GOTO zu verwenden.
Es ist zwar nicht möglich, ein Makro / eine Variable zu erstellen, die als Beschriftung verwendet wird, aber es ist möglich, Makros für die Kommentare der Klammer zu verwenden. Dennoch können zwei Tricks verwendet werden, um die GOTO-Kommentare symmetrischer und ansprechender zu machen (zumindest für mich). Dafür verwende ich zwei Tricks: 1) Sie können ein einzelnes Symbol vor ein Etikett setzen und goto wird es immer noch finden (ich habe keine Ahnung, warum das so ist. Meine Vermutungen, dass es nach einem Laufwerk sucht). 2) Sie können eine Single :
am Ende eines Variablennamens einfügen, und eine Ersetzungs- / Untertretungsfunktion wird nicht ausgelöst (auch nicht bei aktivierten Erweiterungen). In Kombination mit den Makros für Kommentare in Klammern können beide Fälle fast gleich aussehen.
Hier sind die Beispiele (in der Reihenfolge, in der sie mir am besten gefallen):
Mit rechteckigen Klammern :
@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
)
Mit geschweiften Klammern :
@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
)
Mit Klammern :
@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
)
Mischung zwischen Powershell- und C- Stilen ( <
kann nicht verwendet werden, da die Umleitung mit einem höheren Prio erfolgt. *
Kann wegen der nicht verwendet werden %*
):
@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
)
Um zu betonen, dass dies ein Kommentar ist (dachte, es ist nicht so kurz):
@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
)