break||(
code that cannot contain non paired closing bracket
)
แม้ว่าgoto
โซลูชันจะเป็นตัวเลือกที่ดี แต่จะไม่ทำงานในวงเล็บ (รวมถึงคำสั่ง FOR และ IF) แต่สิ่งนี้จะ แม้ว่าคุณควรระมัดระวังเกี่ยวกับการปิดวงเล็บและไวยากรณ์สำหรับFOR
และIF
คำสั่งที่ไม่ถูกต้องเนื่องจากจะถูกแยกวิเคราะห์
อัปเดต
การอัปเดตในคำตอบของ dbenhamทำให้ฉันมีแนวคิดบางอย่าง ประการแรก - มีสองกรณีที่แตกต่างกันที่เราต้องการความคิดเห็นแบบหลายบรรทัด - ในบริบทของวงเล็บที่ไม่สามารถใช้ GOTO และภายนอกได้ บริบทภายในวงเล็บเราสามารถใช้วงเล็บอื่นได้หากมีเงื่อนไขที่ทำให้โค้ดไม่สามารถเรียกใช้งานได้แม้ว่าโค้ดจะยังคงถูกแยกวิเคราะห์และจะตรวจพบข้อผิดพลาดทางไวยากรณ์บางอย่าง ( 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
)
เพื่อเน้นย้ำถึงความคิดเห็นนั้น (คิดว่ามันไม่สั้นนัก):
@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
)