배치 / cmd에서 "코멘트 아웃"(주석 추가) 방법


881

테이블 수정을 수행하는 여러 Python 스크립트를 실행하는 배치 파일이 있습니다.

  1. 사용자가 배치 파일에서 스크립트를 제거하는 대신 실행하고 싶지 않은 1-2 python 스크립트를 주석 처리하고 싶습니다 (따라서 다음 사용자는이 스크립트가 옵션으로 존재한다는 것을 알고 있습니다!)

  2. 또한 배치 파일을 실행하기 전에 업데이트 해야하는 변수에주의를 기울이기 위해 주석을 추가하고 싶습니다. 사용할 수 있음을 알았습니다 REM. 그러나 사용자를 실행 한 후 진행 상태로 사용자를 업데이트하는 것이 더 좋습니다.

주석을 더 적절하게 추가하기위한 구문이 있습니까?


6
여기에서도 훌륭한 답변을 참조하십시오 stackoverflow.com/q/12407800/1011025
ndemou

2
할 수 있습니다 사용 Rem Sth명령 또는 사용이 마크 ::: Sth
scientist_7

답변:


879

rem명령은 의견을 참이다. 스크립트를 실행 한 후에는 기본적으로 누군가를 업데이트하지 않습니다. echo그러나 기본적으로 배치 인터프리터는 처리되기 전에 각 명령 을 인쇄 하기 때문에 일부 스크립트 작성자는 대신이 방법을 사용할 수 있습니다 . 때문에 rem명령이 아무것도하지, 그것은 부작용없이 인쇄하는 것이 안전합니다. 명령을 인쇄하지 않으려면 앞에 접두사를 붙이 @거나 프로그램 전체에 해당 설정을 적용하려면을 실행하십시오 @echo off. ( echo off추가 명령 @을 인쇄하지 않고 에코 설정을 적용하기 전에 해당 명령을 인쇄하지 않습니다.)

따라서 배치 파일에서 다음을 사용할 수 있습니다.

@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py

405
두 개의 콜론 "::"을 사용할 수도 있습니다. 배치 파일이 실행될 때 해당 줄을 표시하거나 실행하지 않고 배치 파일에 설명을 추가하는 두 가지 방법 중 하나입니다. REM과 달리 ECHO off가 배치 파일에 있는지 여부에 관계없이이 줄은 표시되지 않습니다.
Brent81

12
@ Brent81 나는 이것이 정답이어야한다고 생각합니다. 구문 강조를 사용할 때 REM 명령은 실제로 텍스트를 "commented out"으로 강조 표시하지 않습니다.
Automatico

17
이중 콜론은 "유효하지 않은 레이블"입니다. 다음은이를 설명하는 기사와 성능이 REM보다 성능이 더 좋은 이유 (특히 플로피 디스크에서!)이며 들여 쓰기 된 코드 블록 (첫 번째 문자에서만)에서 작동하지 않습니다. robvanderwoude.com/comments.php
Michael Paulukonis

4
흥미 롭군 REM은 '전체 라인 주석'이었고 이중 콜론은 '인라인 주석'이었습니다.REM This whole line is a comment @echo off :: This comment is inline
Richard Smith

@Alhadis, Perl의 Configure 스크립트는 Windows 배치가 아닌 Bourne 쉘로 작성되었으므로 어떻게 관련되어 있습니까? 또한 유효한 Bourne 구문 인 콜론 명령은 "보너스 부작용"이 아닙니다. 그것이 정확히 Bourne 스크립트 에서 사용되는 이유 입니다. 이는 구성을 지원하는 모든 쉘 에서 유효한 주석 지정자가 아닐 수도 있기 때문에 주석 에 유리하게 사용됩니다 . 라인 3 참조.##
Rob Kennedy

955

사용 ::또는REM

::   commenttttttttttt
REM  commenttttttttttt

그러나 (사람들이 지적한대로) :

  • 인라인을 사용하는 경우 &문자 를 추가해야합니다 .
    your commands here & :: commenttttttttttt
  • 내부 중첩 논리 ( IF/ELSE, FOR루프 등 ...) 는 오류를 발생시키기 REM때문에 사용 ::됩니다.
  • :: 내에서 실패 할 수있다 setlocal ENABLEDELAYEDEXPANSION

79
이중 콜론 :: 가장 깨끗한 .bat 주석입니다. 그리고 그것은 라인의 시작이나 중간에 사용될 수 있습니다!
ATSiem

10
이런 식으로 인라인 완료되면 나에게 효과가 없었습니다. cd "C:\Folder" ::this throws a syntax error
Shaun Rowan

3
git add :: blah this is not a comment"치명적 : pathspec 'blah'는 (는) 어떤 파일과도 일치하지 않습니다."
Bob Stein이

19
예제와 같은 줄 &에 주석을 달려면 코드와 주석 사이 에 추가해야합니다 ::. 설명하기 위해, cmd를 신속하고 실행 개방 dir ::blah의 내용을 나열하지 않는 .및 비교 dir & ::blah않는다,
왜 그래

19
사용 경고 ::와 의지 버그 스크립트 setlocal ENABLEDELAYEDEXPANSIONfor
아 제베

50

아니요, 일반 배치 파일 REM은 주석으로 사용 됩니다. ECHO화면에 무언가를 인쇄하는 명령입니다.

사용할 수있는 파일의 섹션을 "주석 처리"합니다 GOTO. 이러한 모든 명령 / 기술의 예 :

REM it starts here the section below can be safely erased once the file is customised
ECHO Hey you need to edit this file before running it!  Check the instructions inside
ECHO Now press ctrl-c to interrupt execution or enter to continue
PAUSE
REM erase the section above once you have customised the file
python executed1.py
ECHO Skipping some stuff now
GOTO End
python skipped1.py
python skipped2.py
:END
python executed2.py

내가 무엇을 말할 수 있습니까? 배치 파일은 오래 전에 사라진 유물이며, 어수선하고 추악합니다.

이 웹 사이트에서 더 많은 내용 읽을 수 있습니다 .

편집 : 당신이 분명히 찾고있는 요소를 포함하도록 예제를 약간 수정했습니다.


31

컴퓨터가 그리 빠르지 않은 시절에 REM 대신 ::을 사용하는 것이 좋습니다. REM의 행을 읽은 다음 무시합니다. :: 'ed 줄은 완전히 무시됩니다. "이전에는"코드가 빨라질 수 있습니다. REM 이후에는 더 많은 공간이 필요합니다.

그리고 첫 번째 의견에서 말했듯이 : 필요한 줄에 정보를 추가 할 수 있습니다.

SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS

부품의 생략에 관해서는. 모든 라인 앞에 REM을 두는 것은 시간이 많이 걸릴 수 있습니다. GOTO를 사용하여 부분을 건너 뛰는 것처럼 큰 코드를 건너 뛸 수있는 쉬운 방법입니다. 코드를 계속하려는 지점에서 : LABEL을 설정하십시오.

SOME CODE

GOTO LABEL  ::REM OUT THIS LINE TO EXECUTE THE CODE BETWEEN THIS GOTO AND :LABEL

SOME CODE TO SKIP
.
LAST LINE OF CODE TO SKIP

:LABEL
CODE TO EXECUTE

1
이중 콜론 줄을 읽지 않고 어떻게 무시할 수 있습니까? 인터프리터가 이중 콜론 라인을 인식하기 전에 먼저 라인을 읽지 않아야합니까?
Rob Kennedy

2
@RobKennedy는 대답을 읽을 때 REM 이후의 모든 것을 읽는 :: 뒤에 아무것도 읽지 않습니다.
James Jenkins

5
명령 인터프리터 @James 읽기를 중지 하면 더 이상 파일을 실행하지 않습니다. 주석이 끝나는 곳과 파일의 다음 줄이 시작되는 곳을 찾으려면 계속 읽으십시오. 그것은으로 그렇게해야 ::하고 rem똑같이.
Rob Kennedy

2
@RobKennedy, 나는 또한 그것이 명령이있는 줄에만 적용되었다는 것을 암시한다고 생각했습니다.
James Jenkins

7
그것은 않습니다 @RobKennedy 읽을 수 있지만하지 않는 구문 분석 이 무엇을 읽고 (또는 프로세스) 다음 때까지 그냥 건너 뛰고 \n다음과 다시 구문 분석 시작 [표창장은 필요로했다]
xDaizu

25

여러 줄 주석

주석을 작성하려는 행이 많으면 모든 행을 주석 처리하는 대신 여러 행 주석을 작성할 수있는 것이 좋습니다.

코멘트 블록에서 Rob van der Woude의이 포스트를 보십시오 :

배치 언어에는 주석 블록이 없지만 효과를 수행 할 수있는 방법이 있습니다.

GOTO EndComment1
This line is comment.
And so is this line.
And this one...
:EndComment1

GOTO블록 주석을 만들기 위해 Label 및 : Label을 사용할 수 있습니다 .

또는 배치 파일의 끝에 주석 블록이 나타나면 EXIT코드 끝에 쓸 수 있으며 이해를 돕기 위해 여러 개의 주석을 작성할 수 있습니다.

@ECHO OFF
REM Do something
  •
  •
REM End of code; use GOTO:EOF instead of EXIT for Windows NT and later
EXIT

Start of comment block at end of batch file
This line is comment.
And so is this line.
And this one...


13

명령을 사용하여 같은 줄에 주석을 달기 : use & :: comment

color C          & :: set red font color
echo IMPORTANT INFORMATION
color            & :: reset the color to default

설명:

&두 개의 명령을 구분하므로이 경우 color C첫 번째 명령이고 :: set red font color두 번째 명령 입니다.


중대한:

주석이 포함 된이 문장은 직관적으로 정확 해 보입니다.

goto error1         :: handling the error

그러나 주석을 올바르게 사용하지는 않습니다 . goto첫 번째 인수 이후의 모든 인수를 무시 하기 때문에 작동합니다 . 증명은 쉽지만 다음 goto중 하나도 실패하지 않습니다.

goto error1 handling the error

그러나 비슷한 시도

color 17            :: grey on blue

받는 인해 4 개 인수 알 수없는 명령 실행에 실패 color명령을 : ::, grey, on, blue.

다음과 같이 작동합니다.

color 17     &      :: grey on blue

따라서 앰퍼샌드는 불가피합니다.


다른 답변에서 앰퍼샌드가 필요하지 않은 것 같습니다.
RoG

3
@ Snaptastic –이 시점에서 다른 답변은 실제로 잘못되었습니다. 최근 편집 내용을 참조하십시오.
miroxlav

이것은 올바른 방법 인 것 같습니다. 심지어 IDE에서 주석으로 강조 표시됩니다.
baburao

5

다음을 사용하여 무언가를 언급 할 수 ::또는 REM:

your commands here
:: commenttttttttttt

또는

your commands here
REM  commenttttttttttt

 

명령과 같은 행에서 수행하려면 앰퍼샌드를 추가해야합니다.

your commands here      & ::  commenttttttttttt

또는

your commands here      & REM  commenttttttttttt

 

노트 :

  • 사용하여 :: 중첩 된 로직 ( IF-ELSE, FOR루프 등) 오류가 발생합니다. 이 경우 REM대신 사용하십시오.

이것은 T.Todua의 답변을 기반으로합니다. 나는 그들의 대답은 좋았지 만 중요한 세부 사항은 생략했지만 내 편집 내용을 롤백 했으므로 개정판을 자체 답변으로 바꾸고 있습니다.
Pikamander2

개정판 Pikamander2 (또한 사용자 @Rado 가 지적한 답변에 그 해답이 병합되어 그 덕분에 답변에 다른 스타일을 선호하고 다른 스타일을 사용했습니다.
T.Todua

1

이것은 오래된 주제이며이 흥미로운 주제에 대한 지식을 넓히기 위해 여기에 이해를 추가하고 싶습니다.

REM과 ::의 주요 차이점은 다음과 같습니다.

REM은 명령 자체이지만 ::는 아닙니다.

우리는 :: CMD 파서가 첫 번째 공백이 아닌 공백을 마주 치 자마자 이것을 토큰으로 취급 할 수 있습니다. 그렇기 때문에 REM 다음에 빈 공간이 있어야 줄에 대한 주석으로 기능 할 수 있지만 :: 뒤에 공백이 필요하지 않습니다.

REM은 명령 자체는 다음 FOR 에서 가장 잘 이해할 수 있습니다. 구문

기본 FOR 구문은 다음과 같습니다

FOR %v in (set) DO <Command> [command param] 

여기에 <Command>우리가 다음과 같은 유효한 명령 줄을 쓸 수 있도록 유효한 명령 할 수있다 rem명령이다

FOR %i in (1,2,3) DO rem echo %i

그러나 우리 ::는 명령이 아닌 다음 줄을 쓸 수 없습니다

FOR %i in (1,2,3) DO :: echo %i

3
기술적으로, ::(유효하지 않은) 라벨입니다 (동작을 설명합니다). 따라서 여전히 사용하지 말아야합니다
Stephan

1

이 구문을 사용하여 배치 파일 끝에 주석을 추가 할 수 있습니다.

@echo off
:: Start of code
...
:: End of code

(I am a comment
So I am!
This can be only at the end of batch files

닫는 괄호를 사용하지 마십시오.

기여 : Leo Guttirez Ramirez https://www.robvanderwoude.com/comments.php

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