배치 파일에 어떤 주석 스타일을 사용해야합니까?


284

배치 파일을 작성하고 있으며이 사용자 안내서를 보았습니다.이 정보는 상당히 유익합니다. 그것이 나에게 보여준 한 가지는 줄 REM뿐만 아니라로 주석을 달 수 있다는 것 입니다 ::. 그것은 말한다 :

배치 코드의 주석은 이중 콜론을 사용하여 작성할 수 있습니다. 리디렉션 기호 전에 레이블이 처리되므로 REM 명령을 사용하는 것보다 낫습니다. ::<remark>문제는 없지만 rem <remark>오류가 발생합니다.

그렇다면 내가 볼 수있는 대부분의 안내서와 예제는 왜 REM명령을 사용 합니까? ::모든 버전의 Windows 에서 작동 합니까 ?


3
"REM"을 사용하여 Windows 98에서 경로 재 지정 행을 주석 처리하는 데 문제가있는 것으로 나타났습니다.
Digger

6
제쳐두고, 파는의 코멘트 @에 맞춰 같이 연결된 가이드입니다 DOS ( command.exe),하지 cmd.exeNT의 이후 Windows 2000에서 발견 명령 프로세서. rem <remark>후자는 잘 작동합니다 ( 최소한의 Windows XP 이후 ) REM. 공식적인 구속적이고 전체적으로 가장 안전한 선택입니다. 반면 ::장점을 가지고, 그것은 문제가 내부에있는 해킹 궁극적 (…)블록 (로 여기에 많은 답변에서 논의가).
mklement0


1
그렇다면 REM의 상황은 정확히 오류를 유발합니까?
TS

답변:


360

tl; dr : REM 은 배치 파일에 주석을 포함시키는 문서화되고 지원되는 방법입니다.


::본질적으로 절대로 뛰어 넘을 수없는 빈 레이블이며, REM아무것도하지 않는 실제 명령입니다. 두 경우 모두 (Windows 7 이상) 리디렉션 연산자가 있어도 문제가 발생하지 않습니다.

그러나 ::특정 상황에서는 블록이 아닌 레이블로 해석되고 일종의 드라이브 문자로 잘못 작동하는 것으로 알려져 있습니다. 나는 정확히 어디에서 조금 모호하지만 그 단독으로 만 REM독점적으로 사용할 수 있습니다 . 배치 파일에 주석을 포함시키는 문서화되고 지원되는 방법이지만 ::특정 구현의 인공물 일뿐입니다.


다음은 루프 ::에서 문제를 일으키는 예 FOR입니다.

이 예제는 데스크탑에서 호출 된 파일에서 작동 하지 않습니다test.bat .

@echo off
for /F "delims=" %%A in ('type C:\Users\%username%\Desktop\test.bat') do (
    ::echo hello>C:\Users\%username%\Desktop\text.txt
)
pause

이 예제는 주석으로 올바르게 작동하지만 :

@echo off
for /F "delims=" %%A in ('type C:\Users\%username%\Desktop\test.bat') do (
    REM echo hello>C:\Users\%username%\Desktop\text.txt
)
pause

출력을 파일로 리디렉션하려고 할 때 문제가있는 것 같습니다. 가장 좋은 추측은이라는 ::이스케이프 된 레이블로 해석된다는 것입니다 :echo.


1
@Firedan : 배치 파일의 이름 및 위치와 관련이 있습니까 (리디렉션 할 파일의 이름 및 위치와 함께)? 그렇지 않으면 예제를 단순화하는 것이 좋습니다.
Joey

15
tl; dr
makoshichi

2
라인에서 변수 사용이 지연되면 ::: 특정 디스크 드라이버를 찾을 수 없습니다 ...와 같은 오류 메시지가 나타납니다. 따라서 REM을 사용하는 것이 좋습니다.
Scott Chu

2
:: 주석이 구문 분석되고> |와 같은 특수 문자 주석을 끝내면 다음 텍스트는 주석 처리되지 않습니다.
mosh

4
@mosh가 맞습니다. 예를 들어 %VAR%변수가 확장됩니다. 당신이 (잘못) 있다고 가정 set TARGET=C:\Program Files (x86)\"foo.exe"하고 DO(..)표현식 안에 전체 표현식이 평가 되기 전에 확장 되어 잘못된 표현식과 매우 설명 할 수없는 오류 가 :: echo %TARGET%발생하기 때문에 오류가 발생 한다고 가정합니다 ( 이 경우 "\ Microsoft는 현재 예기치 않은 " ). 당신은 필요하지 않습니다 또는 표현식입니다. A 는 실제 의견이 아닙니다 . (x86)DO(..)|>::REM
Abel

161

REM에 대한 의견

A는 REM이 첫 번째 토큰의 끝이 아니라면, 전체 라인, 라인 끝에도 여러 캐럿을 발언 할 수있다.

REM This is a comment, the caret is ignored^
echo This line is printed

REM This_is_a_comment_the_caret_appends_the_next_line^
echo This line is part of the remark

REM 뒤에 일부 문자 .:\/=가 약간 다르게 작동하며 앰퍼샌드에 주석을 달지 않으므로 인라인 주석으로 사용할 수 있습니다.

echo First & REM. This is a comment & echo second

그러나 기존과 같은 파일에 문제 피하기 위해 REM, REM.bat또는 REM;.bat만 수정 변형이 사용되어야한다.

REM^;<space>Comment

그리고 캐릭터 ;는 또한;,:\/=

REM은에 관한 느린 6 회 이상 ::(100000 주석 행과 Win7SP1 테스트).
일반적인 사용법의 경우 중요하지 않습니다 (주석 라인 당 58µs 대 360µs)

:: 의견

A는 ::항상 라인 엔드 캐럿을 실행 합니다.

:: This is also a comment^
echo This line is also a comment

레이블과 주석 레이블 :: 에는 괄호 블록에 특수 논리가 있습니다.
그들은 항상 두 줄에 걸쳐 있습니다 : goto 명령이 작동하지 않습니다 .
따라서 구문 오류의 원인이되기 때문에 괄호 블록에는 권장되지 않습니다.

로 라인 표시되어 있지만 줄은 주석으로ECHO ONREM::

둘 다 실제로 나머지 줄을 주석 처리 할 수 ​​없으므로 간단한 %~구문 오류가 발생합니다.

REM This comment will result in an error %~ ...

그러나 REM은 특수 문자 단계가 완료되기 전에도 초기 단계에서 배치 파서를 중지 할 수 있습니다.

@echo ON
REM This caret ^ is visible

& REM 또는 & ::을 사용 하여 명령 행 끝에 주석을 추가 할 수 있습니다 . 이 접근 방식은 '&'가 같은 줄에 새로운 명령을 도입하기 때문에 작동합니다.

퍼센트 기호가있는 주석 % = comment = %

퍼센트 기호가있는 주석 스타일이 있습니다.

실제로 이들은 변수이지만 아무것도 확장되지 않습니다.
그러나 장점은 없이도 같은 줄에 배치 할 수 있다는 것 &입니다.
등호는 그러한 변수가 존재할 수 없도록합니다.

echo Mytest
set "var=3"     %= This is a comment in the same line=%

매크로가 정의 될 때 주석이 제거되므로 런타임 동작을 변경하지 않으므로 배치 매크로에 퍼센트 스타일이 권장됩니다.

set $test=(%\n%
%=Start of code=% ^
echo myMacro%\n%
)

2
주목해야한다 %=코멘트 즉, 인용 부호 몹시 신경을 쓰는입니다 set foo=bar %=baz결과 foo에 확장이 bar %=baz처럼, set foo="bar" %=baz오직 반면, set "foo=bar" %=baz결과 foo에 확대 bar의도 한대로.
LastStar007

3
@ LastStar007 : 항상 인용 스타일을 사용하는 set "foo=bar"것이 일반적으로 권장 할 가치가 있습니다. 값을 명확하게 구분하는 가장 강력한 형태이기 때문입니다. 당신이 설명하고있는 문제에 고유 set 행동,에없는 특정 %= … =%의견 : 당신이 사용하지 않는 "var=val"인용, set다음 모든 것을 고려 =해당하는 경우, 행의 끝을 통해 (공백을 후행 또는 포함 된 값의 시작을 다음 인라인 명령).
mklement0

28

다른 대안은 주석을 항상 확장되지 않는 변수 확장으로 표현하는 것입니다.

변수 이름은 포함 할 수 없습니다 =, 같은 문서화되지 않은 동적 변수를 제외
%=ExitCode%하고 %=C:%. 변수 이름은 =첫 번째 위치 이후를 포함 할 수 없습니다 . 따라서 때로는 다음을 사용하여 괄호로 묶은 블록 내에 주석을 포함시킵니다.

::This comment hack is not always safe within parentheses.
(
  %= This comment hack is always safe, even within parentheses =%
)

인라인 주석을 통합하는 좋은 방법이기도합니다.

dir junk >nul 2>&1 && %= If found =% echo found || %= else =% echo not found

선행 =은 필요하지 않지만 대칭의 경우는 좋아합니다.

두 가지 제한이 있습니다.

1) 코멘트는 포함 할 수 없습니다 %

2) 코멘트는 포함 할 수 없습니다 :


롤! 하나의 대형 변수로 만드십시오! 천재! %=ExitCode%? 산뜻한. 매일 새로운 것을 배우십시오!
James K

후행 =이 필요 하다는 것을 의미합니다 . 그러나 그렇지 않은 것 같습니다.
James K

4
@JamesK-나는 후행을 사용하여 =% = ExitCode = %와 같은 것이 동적 변수가 아닌 "설명"입니다. 나는 항상 작동하는 스타일을 선호합니다 (물론 맨 아래에 명시된 제한 사항 제외).
dbenham

동적 변수 (예 : % = ExitCode % % = ExitCodeAscii % % = C : % % = D : % % __ CD __ % 등)에 대한 탐색은 stackoverflow.com/a/20169219/1689714 를 참조하십시오 .
Kieron Hardy

25

레이블 ::을 사용 하여 주석을 작성하고 코드를 주석 처리 할 수 있다는 것을 깨달았 REM습니다. 언급했듯이 이중 콜론은 ()차단 된 코드 내부에서 사용될 때 문제를 일으킬 수 있지만 레이블 ::과 코드를 번갈아 사용하여 해결 방법을 발견했습니다.:space

:: This, of course, does
:: not cause errors.

(
  :: But
   : neither
  :: does
   : this.
)

추악하지는 않지만 REM실제로 코드에 약간의 스타일을 추가합니다.

그래서 내가 사용하는 코드 블록 외부 ::와 내부에서 ::와 사이를 번갈아 사용 합니다 :.

그건 그렇고, 배치 파일의 헤더와 같이 많은 수의 주석 덩어리에 대해서는 단순히 goto주석을 달아서 특수 명령과 문자를 완전히 피할 수 있습니다 . 이렇게하면 CMD실제로 해당 라인을 처리하려고 시도하면 히스 가 발생한다는 사실에도 불구하고 원하는 방법이나 스타일의 마크 업을 사용할 수 있습니다 .

@echo off
goto :TopOfCode

=======================================================================
COOLCODE.BAT

Useage:
  COOLCODE [/?] | [ [/a][/c:[##][a][b][c]] INPUTFILE OUTPUTFILE ]

Switches:
       /?    - This menu
       /a    - Some option
       /c:## - Where ## is which line number to begin the processing at.
         :a  - Some optional method of processing
         :b  - A third option for processing
         :c  - A forth option
  INPUTFILE  - The file to process.
  OUTPUTFILE - Store results here.

 Notes:
   Bla bla bla.

:TopOfCode
CODE
.
.
.

사용 당신이 원하는 어느 표기법 *의, @의 등


/?이 메뉴를 인쇄하기 위해 스위치를 어떻게 처리 합니까?
hoang

1
@hoang setlocal ENABLEDELAYEDEXPANSION <NEWLINE> set var = % ~ 1 <NEWLINE> 에코 첫 번째 매개 변수는 % 1입니다. <NEWLINE> IF! VAR! == "/?" (GOTO 사용) <NEWLINE> : USAGE <NEWLINE> 에코 블라 블라 .. <NEWLINE>
GL2014

16
행을 삽입하거나 삭제할 때 단일 및 이중 콜론을 번갈아 사용하면 두통이 발생합니다.

@ GL2014는 기본적으로 " 메뉴를 인쇄 하지 않습니다 "라고 말합니다. 예제 코드에서는 사용 메모의 각 줄에 접두사 에코가 필요합니다. James K의 답변은 사용 메모를 작성된대로 인쇄 할 수있는 방법이 있음을 시사하는 정도까지 오해의 소지가 있습니다.
Timbo

1
@Timbo 나는 이 답변 에 대해 @hoang이 요구하는 것을 실제로 수행 하는 서브 루틴 ( :PrintHelp)을 썼습니다 . <HELP> 및 </ HELP>를 마커로 사용하지만 자신에게 적합한 것을 사용할 수 있습니다.
cdlvcdlv 2016 년

21

이 답변은이 페이지의 많은 훌륭한 답변에 대한 실용적인 요약 을 시도합니다 .

jeb의 훌륭한 답변 은 실제로 심층적으로 진행되며 많은 경우를 다루기 때문에 특별한 언급이 필요합니다.
특히, 잘못 구성된 변수 / 파라미터 참조 는 아래의 라인을 포함하여 아래의 솔루션을 모두%~ 손상시킬 수REM 있다고 지적 합니다 .


전체 주석-직접 지원되는 유일한 스타일 :


당신이 경우 않는 사용하려면:: , 당신이 선택할 수 있습니다

  • 하나 : 안전을 위해, 내부 예외하게 (...)블록을하고 사용 REM이, 또는 장소 코멘트를하지 않는 내부 (...) 모두.
  • 또는 : 내부의 안전한 사용을 위해 고통스럽고 제한적인 규칙을::(...) 기억하십시오 . 다음 스 니펫에 요약되어 있습니다.
@echo off

for %%i in ("dummy loop") do (

  :: This works: ONE comment line only, followed by a DIFFERENT, NONBLANK line.
  date /t

  REM If you followed a :: line directly with another one, the *2nd* one
  REM would generate a spurious "The system cannot find the drive specified."
  REM error message and potentially execute commands inside the comment.
  REM In the following - commented-out - example, file "out.txt" would be
  REM created (as an empty file), and the ECHO command would execute.
  REM   :: 1st line
  REM   :: 2nd line > out.txt & echo HERE

  REM NOTE: If :: were used in the 2 cases explained below, the FOR statement
  REM would *break altogether*, reporting:
  REM  1st case: "The syntax of the command is incorrect."
  REM  2nd case: ") was unexpected at this time."

  REM Because the next line is *blank*, :: would NOT work here.

  REM Because this is the *last line* in the block, :: would NOT work here.
)

다른 주석 스타일의 에뮬레이션 -인라인 및 멀티 라인 :

참고 이러한 스타일의 어느 것도 직접 배치 언어에 의해 지원되지 않습니다 할 수 있지만 에뮬레이트 .


인라인 코멘트 :

* 아래의 코드 스 니펫 ver은 실험을 용이하게하기 위해 임의의 명령에 대한 스탠드 인으로 사용 됩니다.
* SET인라인 주석으로 명령이 올바르게 작동하도록 하려면 name=value부품을 큰 따옴표로 묶으십시오 . 예를 들어, SET "foo=bar". [1]

이와 관련하여 우리는 두 가지 하위 유형을 구별 할 수 있습니다.

  • EOL 주석 ([to-the-]-end-of-line])은 명령 뒤에 배치 될 수 있으며 줄 끝까지 계속 확장됩니다 (다시 말해서 jeb 's answer ).

    • ver & REM <comment>REM유효한 명령 이라는 사실을 &이용하며 기존 명령 뒤에 추가 명령을 배치하는 데 사용할 수 있습니다.
    • ver & :: <comment>그것의 안전한 사용은 독립형을 사용하는 것보다 훨씬 제한적이기 때문에 실제로(...) 작동하지만 블록 외부에서만 사용할 수:: 있습니다.
  • 인라인 주석-한 줄의 여러 명령 사이 에 또는 주어진 명령 내부 에 이상적으로 배치 됩니다.
    인라인 주석은 가장 유연한 (단일 라인) 양식이며 정의에 따라 EOL 주석으로도 사용될 수 있습니다.

    • ver & REM^. ^<comment^> & ver주석 삽입 명령 사이에 (다시,의 호의 젭의 대답 )하지만, 참고 방법 <>필요하기 ^때문에, 적어 주며을 문자를 다음과 같습니다. : 그대로 사용할 수 없다< > | (이스케이프 반면 &하거나 &&또는 ||개시 다음 명령).

    • %= <comment> =%dbenham의 훌륭한 답변 에서 자세히 설명 했듯이 , 가장 유연한 형식 은 명령 에서 (논쟁 중) 배치 될 수 있기 때문 입니다.
      그것은 방식으로 가변 확장 구문을 활용하는 표현은 항상로 확장되도록 빈 문자열 - 주석 텍스트가 둘 다 포함하지 않는 긴만큼 %:
      처럼 REM, %= <comment> =%물론 외부와 내부 모두 작동 (...)블록을하지만 시각적 특징입니다; 유일한 단점은 타이핑하기가 어렵고 문법적으로 잘못되기 쉽고 널리 알려지지 않았기 때문에 기술을 사용하는 소스 코드의 이해를 방해 할 수 있다는 것입니다.


여러 줄 (전체 줄) 주석 :

  • James K의 답변goto문장과 레이블 을 사용하여 임의 길이와 내용의 여러 줄 주석을 구분하는 방법을 보여줍니다 (이 경우 사용 정보를 저장하는 데 사용).

  • Zee의 답변"널 레이블" 을 사용하여 여러 줄 주석을 만드는 방법을 보여 주지만 모든 내부 줄을로 종료하려면주의를 기울여야합니다 ^.

  • Woude의 블로그 게시물 데르 롭 밴은 당신이 할 수 있습니다 다른 다소 모호한 옵션 언급 종료 주석 행의 임의의 수의 파일을 :의 개방 (에만 무시 다음에 오는 모든 원인 으로 오래가 포함되어 있지 않기 때문에, (비를 ^-escaped) ), 즉, 한 블록이되지 않으므로 폐쇄 .


[1] 사용하여 SET "foo=bar"이름과 주위에 따옴표를 넣어, - 즉, 변수를 정의 =하고 값을 결합하는 -과 같은 명령에 필요한 SET "foo=bar" & REM Set foo to bar.어떤 것을 보장하기 위해 그렇게으로, 다음 (가)이 경우, 다음 명령에 변수 값 (최대 의도 단일 공간)이 우연히 그 일부가되지는 않습니다.
(제쳐두고 : SET foo="bar"문제를 피할뿐만 아니라 큰 따옴표를 값의 일부로 만듭니다 ).
이 문제는 값을 따르는 우발적 인 후행 공백에 내재되어 SET있으며 심지어 적용 되기 때문에 항상 접근 방식을 사용하는 것이 좋습니다 .SET "foo=bar"


7

페이지는 "::"를 사용하면 특정 제약 조건에서 더 빠를 것이라고 말합니다. 선택시 고려해야 할 사항


2
이것은 적어도 Win7SP1의 경우 ::보다 6 배 더 빠를 수 있습니다.REM
jeb

4

좋은 질문입니다 ...이 기능도 오랫동안 찾고있었습니다 ...

몇 가지 테스트와 트릭 후에 더 나은 솔루션이 더 분명한 것 같습니다 ...

-> 파서 무결성 실패를 방지하는 가장 좋은 방법은 REM을 재사용하는 것입니다.

echo this will show until the next REM &REM this will not show

"NULL LABEL"트릭과 함께 여러 줄을 사용할 수도 있습니다 ...

::(^
this is a multiline^
comment... inside a null label!^
dont forget the ^caret at the end-of-line^
to assure continuity of text^ 
)

3

제임스 K, 내가 한 말의 상당 부분이 잘못되어서 죄송합니다. 내가 한 테스트는 다음과 같습니다.

@ECHO OFF
(
  :: But
   : neither
  :: does
   : this
  :: also.
)

이는 귀하의 설명에 부합하지만 "현재는 예상치 못한"오류로 실패합니다. 에러 메시지.

나는 오늘 더 먼 테스트를 해왔고 교대가 열쇠가 아니라는 것을 알았지 만 열쇠에는 짝수의 줄이 있고 이중 콜론 (: :)으로 시작하고 이중 콜론으로 끝나지 않는 행에 두 줄이없는 것처럼 보입니다. . 다음을 고려하세요:

@ECHO OFF
(
   : But
   : neither
   : does
   : this
   : cause
   : problems.
)

작동합니다!

그러나 이것을 고려하십시오 :

@ECHO OFF
(
   : Test1
   : Test2
   : Test3
   : Test4
   : Test5
   ECHO.
)

명령을 끝낼 때 짝수 개의 주석을 갖는 규칙이 적용되지 않는 것 같습니다.

불행히도 이것은 다람쥐를 사용하기를 확신하지 못할 정도로 충분합니다.

실제로 가장 좋은 해결책은 내가 생각할 수있는 가장 안전한 방법은 Notepad ++와 같은 프로그램이 REM을 이중 콜론으로 읽은 다음 파일을 저장할 때 이중 콜론을 REM 문으로 다시 쓰는 것입니다. 그러나 나는 그런 프로그램을 알지 못하고 메모장 ++ 용 플러그인도 알지 못합니다.


2

페이지 에서 주제에 대한 매우 상세하고 분석적인 토론을 볼 수 있습니다

예제 코드와 다른 옵션의 장단점이 있습니다.


1
답변에 제공된 링크의 내용을 요약해야합니다. 그렇지 않으면 "링크 전용 응답"이라고하며 링크가 사라지면 완전히 쓸모가 없습니다. 이 경우, 느린 플로피 디스크에서 배치 파일의 읽기 속도를 최적화하여 선택하는 점에서 페이지가 다소 유머러스하다고 지적합니다. :)
GreenAsJade

0

배치 파일에 주석을 달 수있는 방법에는 여러 가지가 있습니다

1) 렘 사용

이것이 공식적인 방법입니다. ::캐럿이 처리되기 전에 파싱을 조기에 중지하지만 분명히 실행하는 데 시간이 오래 걸립니다 . 확장 률 ::은 rem 이전에 발생하여 식별되므로 백분율을 잘못 사용 %~하면 백분율이 존재하는 경우 오류가 발생합니다. 코드 블록 어디서나 안전하게 사용할 수 있습니다.

2) 라벨을 사용하여 :, ::또는 :;

의 경우 :: comment': comment'는 잘못된 문자로 시작 하므로 잘못된 레이블 이름 입니다. 레이블 중간에 콜론을 사용하는 것이 좋습니다. 레이블이 시작될 때 공백이 시작 : label되면 제거 됩니다 :label. 레이블 중간에 공백이나 콜론이 표시되는 경우 나머지 이름은 해석되지 않으며 , 레이블이 두 개 있으면 :f:oo:f rr로 해석되어 :f파일에서 나중에 정의 된 레이블만으로 해석됩니다 . 라벨의 나머지 부분은 사실상 주석입니다. 여기:: 에 나열된 여러 가지 대안이 있습니다 . 당신은 결코 goto또는 레이블입니다. 및 작동하지 않습니다.call::foogoto :foogoto ::foo

그것들은 코드 블록 외부에서 잘 작동하지만 코드 블록의 레이블 뒤에 유효하지 않거나 유효하지 않은 유효한 명령 줄이 있어야합니다. :: comment실제로 다른 유효한 명령입니다. 레이블이 아닌 명령으로 해석합니다. 명령이 우선합니다. ::볼륨 으로 cd하는 명령은 다음과 같이 실행 하면 작동합니다 subst :: C:\. 그렇지 않으면 볼륨 오류를 찾을 수 없습니다. 이것이 :;이런 방식으로 해석 될 수 없기 때문에 논란의 여지가 더 나은 이유 입니다. 따라서 레이블로 해석되어 유효한 명령으로 사용됩니다. 이것은 재귀 적이 지 않습니다. 즉, 다음 레이블에는 명령이 필요하지 않습니다. 그래서 두 가지로 나옵니다.

레이블 뒤에 올바른 명령을 제공해야합니다 (예 :) echo something. 코드 블록의 레이블에는 유효한 명령이 하나 이상 있어야하므로 행은 두 쌍이됩니다. )다음 줄에 공백이나 닫는 괄호가 있으면 예기치 않은 오류가 발생합니다. 두 ::줄 사이에 공백 이 있으면 잘못된 구문 오류가 발생합니다.

::주석 에서 캐럿 연산자를 다음 과 같이 사용할 수도 있습니다 .

@echo off

echo hello
(
   :;(^
   this^
   is^
   a^
   comment^
   )
   :;
)
   :;^
   this^
   is^
   a^
   comment
   :;
) 

그러나 :;위에서 언급 한 이유로 후행이 필요합니다 .

@echo off

(
echo hello
:;
:; comment
:; comment
:;
)
echo hello

짝수가있는 한 괜찮습니다. 이것은 의심 할 여지없이 4 줄로 주석 처리하는 가장 좋은 방법 :;입니다. 으로 :;당신이하지 않는 필요한 모든 오류는 사용을 억제 할 수 있습니다 2> nul또는 subst :: C:\. 당신이 사용할 수있는 subst :: C:\볼륨을 찾을 수 없습니다 오류가 멀리 갈 수 있도록하지만 당신은 또한 넣어 C로해야 의미 : 코드에서되고에서 작업 디렉토리를 방지하기 위해 ::\.

줄 끝에 주석을 달려면 command &::또는 을 수행 할 수 command & rem comment있지만 여전히 짝수 여야합니다.

@echo off

(
echo hello & :;yes
echo hello & :;yes
:;
)

echo hello

첫 번째 echo hello & :;yes줄에는 다음 줄에 유효한 명령이 있지만 두 번째 줄에는 & :;yes그렇지 않습니다 :;.

3) 유효하지 않은 환경 변수 사용

%= comment =%. 배치 파일에서 정의되지 않은 환경 변수는 스크립트에서 제거됩니다. 따라서 줄 끝에서을 사용하지 않고도 사용할 수 &있습니다. 유효하지 않은 환경 변수, 즉 등호가 포함 된 환경 변수를 사용하는 것이 관례입니다. 여분의 등호는 필요하지 않지만 대칭으로 보입니다. 또한 "="로 시작하는 변수 이름은 문서화되지 않은 동적 변수를 위해 예약되어 있습니다. 이러한 동적 변수는 "="로 끝나지 않으므로 주석의 시작과 끝에 "="를 사용하면 이름이 충돌 할 가능성이 없습니다. 댓글은 %또는을 포함 할 수 없습니다 :.

@echo off 
echo This is an example of an %= Inline Comment =% in the middle of a line.

4) 명령으로 stderr을 nul로 리디렉션

@echo off
(
echo hello
;this is a comment 2> nul
;this is another comment  2> nul
)

5) 파일 끝에서 닫히지 않은 괄호 뒤의 모든 것은 주석입니다

@echo off
(
echo hello
)

(this is a comment
this is a comment
this is a comment
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.