break||(
code that cannot contain non paired closing bracket
)
Mặc dù goto
giải pháp là một lựa chọn tốt nhưng nó sẽ không hoạt động trong dấu ngoặc (bao gồm các lệnh FOR và IF). Mặc dù bạn nên cẩn thận về việc đóng dấu ngoặc và cú pháp không hợp lệ cho FOR
và IF
các lệnh vì chúng sẽ được phân tích cú pháp.
Cập nhật
Cập nhật trong câu trả lời của dbenham đã cho tôi một số ý tưởng. Đầu tiên - có hai trường hợp khác nhau mà chúng ta có thể cần nhận xét nhiều dòng - trong ngữ cảnh của dấu ngoặc vuông mà GOTO không thể được sử dụng và bên ngoài nó. Bên trong dấu ngoặc bối cảnh chúng ta có thể sử dụng dấu ngoặc khác nếu có một điều kiện, giúp ngăn chặn các mã được executed.Though mã Thede vẫn sẽ được phân tích và một số lỗi cú pháp sẽ được phát hiện ( FOR
, IF
, khung không đúng cách khép kín, sai mở rộng tham số ..). Vì vậy, nếu có thể thì tốt hơn nên sử dụng GOTO.
Mặc dù không thể tạo macro / biến được sử dụng làm nhãn - nhưng có thể sử dụng macro cho các nhận xét của dấu ngoặc. Tuy nhiên, hai thủ thuật có thể được sử dụng để làm cho các nhận xét GOTO đồng bộ hơn và dễ chịu hơn (ít nhất là đối với tôi). Đối với điều này, tôi sẽ sử dụng hai thủ thuật - 1) bạn có thể đặt một biểu tượng trước nhãn và goto vẫn có thể tìm thấy nó (tôi không biết tại sao lại như vậy. Tôi đoán nó đang tìm kiếm một ổ đĩa). 2) bạn có thể đặt một tên duy nhất :
vào cuối tên biến và tính năng thay thế / trừ đi sẽ không được kích hoạt (ngay cả trong các phần mở rộng đã bật). Kết hợp với các macro cho nhận xét trong ngoặc có thể làm cho cả hai trường hợp trông gần như giống nhau.
Vì vậy, đây là các ví dụ (theo thứ tự tôi thích chúng nhất):
Với dấu ngoặc hình chữ nhật :
@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
)
Với dấu ngoặc nhọn :
@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
)
Với dấu ngoặc đơn :
@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
)
Hỗn hợp giữa kiểu powershell và C ( <
không thể sử dụng vì chuyển hướng với prio cao hơn. *
Không thể sử dụng do %*
):
@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
)
Để nhấn mạnh đó là một nhận xét (nghĩ rằng nó không quá ngắn):
@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
)