วิธีการ“ ออกความคิดเห็น” (เพิ่มความคิดเห็น) ในชุด / cmd?


881

ฉันมีแบตช์ไฟล์ที่รันสคริปต์หลามหลายตัวที่ทำการดัดแปลงตาราง

  1. ฉันต้องการให้ผู้ใช้แสดงความคิดเห็นสคริปต์ 1-2 python ที่ไม่ต้องการเรียกใช้แทนที่จะลบออกจากไฟล์แบทช์ (เพื่อให้ผู้ใช้รายต่อไปรู้ว่าสคริปต์เหล่านี้มีอยู่เป็นตัวเลือก!)

  2. ฉันต้องการเพิ่มความคิดเห็นเพื่อให้ทราบถึงตัวแปรที่พวกเขาต้องการปรับปรุงในไฟล์ Batch โดยเฉพาะก่อนที่จะเรียกใช้ REMผมเห็นว่าผมสามารถใช้ แต่ดูเหมือนว่าจะมีความคืบหน้ามากขึ้นในการอัปเดตผู้ใช้หลังจากที่พวกเขาเรียกใช้แล้ว

มีไวยากรณ์สำหรับการเพิ่มความคิดเห็นอย่างเหมาะสมหรือไม่


6
ดูคำตอบที่ยอดเยี่ยมได้ที่นี่stackoverflow.com/q/12407800/1011025
ndemou

2
คุณสามารถใช้Rem Sthคำสั่งหรือการใช้เครื่องหมายนี้::: Sth
scientist_7

คำตอบ:


879

remคำสั่งเป็นที่แน่นอนสำหรับความคิดเห็น จะไม่อัปเดตทุกคนหลังจากเรียกใช้สคริปต์โดยเนื้อแท้ ผู้เขียนสคริปต์บางคนอาจใช้วิธีนั้นแทนechoเนื่องจากโดยปกติแล้วล่ามแบทช์จะพิมพ์แต่ละคำสั่งก่อนที่จะประมวลผล เนื่องจากremคำสั่งไม่ได้ทำอะไรจึงปลอดภัยที่จะพิมพ์โดยไม่มีผลข้างเคียง เพื่อหลีกเลี่ยงการพิมพ์คำสั่งนำหน้าด้วยหรือจะใช้การตั้งค่าที่ตลอดโปรแกรมวิ่ง@ @echo off( echo offเพื่อหลีกเลี่ยงการพิมพ์คำสั่งเพิ่มเติมและ@เพื่อหลีกเลี่ยงการพิมพ์คำสั่งนั้นก่อนการตั้งค่า echo จะมีผล)

ดังนั้นในแบทช์ไฟล์ของคุณคุณอาจใช้สิ่งนี้:

@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 เขียนไว้ในเชลล์เป้าหมายไม่ใช่แบตช์ Windows ดังนั้นมันจึงมีความเกี่ยวข้องที่นี่ นอกจากนี้คำสั่งโคลอนเป็นไวยากรณ์ 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' ไม่ตรงกับไฟล์ใด ๆ"
บ๊อบสไตน์

19
สำหรับความคิดเห็นในบรรทัดเดียวกันเป็นตัวอย่างแสดงให้เห็นถึงคุณต้องเพิ่มระหว่างรหัสและความคิดเห็น& ::เพื่อแสดงให้เห็นเปิด cmd prompt และเรียกใช้dir ::blahซึ่งไม่ได้แสดงเนื้อหาของ.และเปรียบเทียบกับdir & ::blahที่ทำ
Rado

19
คำเตือนการใช้::บั๊กสคริปต์ด้วยsetlocal ENABLEDELAYEDEXPANSIONและfor
Azevedo

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

ฉันจะว่าอย่างไรได้? ไฟล์แบทช์เป็นที่ระลึกของเวลานานไปพวกเขากำลัง clunky และน่าเกลียด

คุณสามารถอ่านเพิ่มเติมได้ที่เว็บไซต์นี้

แก้ไข: แก้ไขตัวอย่างเล็กน้อยเพื่อให้มันมีองค์ประกอบที่คุณกำลังมองหาที่เห็นได้ชัด


31

The :: แทนที่จะใช้ REM ในวันที่คอมพิวเตอร์ไม่ค่อยเร็ว บรรทัด REM'ed ถูกอ่านแล้วจึงติดตั้ง :: 'ed line ถูกมองข้ามไปตลอดทาง นี่อาจทำให้โค้ดของคุณเร็วขึ้นใน "วันเก่า ๆ " ยิ่งไปกว่านั้นหลังจาก 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ป้ายกำกับและ: ป้ายกำกับสำหรับการทำบล็อกความคิดเห็น

หรือหากบล็อกความคิดเห็นปรากฏขึ้นที่ท้ายไฟล์แบตช์คุณสามารถเขียน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...

สิ่งนี้มักใช้ในชุดผสมและสคริปต์ VBS / JS แม้ว่าจะใช้หากifแทนที่goto stackoverflow.com/q/9074476/995714 ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/34512715/995714
phuclv

13

ใส่ความคิดเห็นในบรรทัดเดียวกันด้วยคำสั่ง: ใช้ & :: 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 , , ,::greyonblue

มันจะทำงานเป็น:

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 %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
ในทางเทคนิค::คือฉลาก (ไม่ถูกต้อง) (ซึ่งอธิบายพฤติกรรมของมัน) และไม่ควรใช้ (แม้ว่าจะยังค่อนข้างบ่อย)
เตฟาน

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.