break||(
code that cannot contain non paired closing bracket
)
Meskipun goto
solusinya adalah opsi yang baik, itu tidak akan berfungsi dalam tanda kurung (termasuk perintah FOR dan IF). Tapi ini akan berhasil. Meskipun Anda harus berhati-hati saat menutup tanda kurung dan sintaks FOR
dan IF
perintah yang tidak valid karena keduanya akan diurai.
Memperbarui
Pembaruan dalam jawaban dbenham memberi saya beberapa ide. Pertama - ada dua kasus berbeda di mana kita membutuhkan komentar multi baris - dalam konteks braket di mana GOTO tidak dapat digunakan dan di luarnya. Di dalam konteks tanda kurung kita dapat menggunakan tanda kurung lain jika ada kondisi yang mencegah kode untuk dieksekusi, meskipun kode tersebut masih akan diurai dan beberapa kesalahan sintaks akan terdeteksi ( FOR
,IF
tanda kurung yang tidak benar, ekspansi parameter yang salah ..). Jadi jika memungkinkan lebih baik gunakan GOTO.
Meskipun tidak mungkin membuat makro / variabel yang digunakan sebagai label - tetapi dimungkinkan untuk menggunakan makro untuk komentar braket. Namun dua trik dapat digunakan untuk membuat komentar GOTO lebih simetris dan lebih menyenangkan (setidaknya untuk saya). Untuk ini, saya akan menggunakan dua trik - 1) Anda dapat meletakkan satu simbol di depan label dan goto masih dapat menemukannya (saya tidak tahu mengapa ini. Petunjuk saya adalah mencari drive). 2) Anda dapat menempatkan satu:
di akhir nama variabel dan fitur penggantian / subtring tidak akan dipicu (bahkan di bawah ekstensi yang diaktifkan). Yang dikombinasikan dengan makro untuk komentar tanda kurung dapat membuat kedua kasus terlihat hampir sama.
Jadi inilah contohnya (dalam urutan yang paling saya sukai):
Dengan tanda kurung persegi panjang :
@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
)
Dengan tanda kurung kurawal :
@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
)
Dengan tanda kurung :
@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
)
Campuran antara PowerShell dan C gaya ( <
tidak dapat digunakan karena pengalihan dengan prio lebih tinggi *
tidak dapat digunakan karena %*
):
@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
)
Untuk menekankan itu adalah komentar (menurut saya tidak terlalu pendek):
@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
)