break||(
code that cannot contain non paired closing bracket
)
Trong khi giải pháp goto
là một lựa chọn tốt, nó sẽ không hoạt động within brackets (bao gồm cả lệnh FOR và IF). Nhưng điều này sẽ. 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 các lệnh FOR
và IF
vì chúng sẽ được phân tích cú pháp.
Cập nhật
Bản cập nhật trong câu trả lời dbenham's đã cho tôi một số ý tưởng. Đầu tiên - có hai trường hợp khác nhau mà chúng tôi có thể cần các nhận xét nhiều dòng - trong ngữ cảnh của khung mà GOTO không thể được sử dụng và bên ngoài nó. Dấu ngoặc trong bên trong, chúng ta có thể sử dụng một dấu ngoặc khác nếu có điều kiện ngăn mã được thực hiện. Mặc dù mã sẽ bị phân tích và một số lỗi cú pháp sẽ được phát hiện (FOR
, IF
, dấu ngoặc không đúng, mở rộng tham số sai. Vì vậy, nếu có thể tốt hơn là 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 nhận xét của khung.Chuyển hai thủ thuật có thể được sử dụng làm cho GOTO nhận xét nhiều hơn về mặt đối xứng và dễ chịu hơn (ít nhất là 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 ở phía trước nhãn và goto vẫn có thể để tìm nó (Tôi không biết tại sao điều này.). 2) bạn có thể đặt một đơn :
vào cuối tên biến và tính năng thay thế/phụ đề sẽ không được kích hoạt (ngay cả trong các tiện ích đã bật). Kết hợp với các macro cho các bình luận dấu ngoặc vuông có thể làm cho cả hai trường hợp trông gần như giống nhau.
Vì vậy, đây là những ví dụ (theo thứ tự tôi thích chúng nhất):
Với khung 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 PowerShell và C phong cách (<
không thể được sử dụng bởi vì chuyển hướng là với PRIO cao hơn.*
không thể sử dụng vì sự %*
):
@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 đó là một lời nhận xét (nghĩ rằng nó không phải là 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
)
Cảm ơn bạn sir! – user219628
+1: Thật vui khi sử dụng "goto" cho điều này VÀ nó hoạt động! –
Tôi nghĩ điều thú vị là không có định nghĩa nhận xét thực sự trong dòng lệnh, tôi không thể chấp nhận dòng 'REM' làm dòng chú thích, nó làm cho đầu ra bị mờ – mkb