बैच / cmd में "कमेंट-आउट" (टिप्पणी जोड़ें) कैसे करें?


881

मेरे पास एक बैच फ़ाइल है जो कई पाइथन स्क्रिप्ट चलाती है जो तालिका में संशोधन करती है।

  1. मैं चाहता हूं कि उपयोगकर्ता 1-2 अजगर लिपियों पर टिप्पणी करें, जिन्हें वे बैच फ़ाइल से हटाने के बजाय चलाना नहीं चाहते हैं (इसलिए अगला उपयोगकर्ता जानता है कि ये स्क्रिप्ट विकल्प के रूप में मौजूद हैं!)

  2. मैं उनके ध्यान में लाने के लिए टिप्पणियों को भी जोड़ना चाहता हूं विशेष रूप से वे चर जो उन्हें चलाने से पहले बैच फ़ाइल में अपडेट करने की आवश्यकता है। मैं देखता हूं कि मैं उपयोग कर सकता हूं REM। लेकिन ऐसा लगता है कि उपयोगकर्ता द्वारा इसे चलाने के बाद प्रगति के साथ अद्यतन करने के लिए यह अधिक है।

क्या अधिक उचित रूप से एक टिप्पणी जोड़ने के लिए एक वाक्यविन्यास है?


6
यहां भी उत्कृष्ट उत्तर देखें stackoverflow.com/q/12407800/1011025
ndemou

2
आप Rem Sthकमांड का उपयोग कर सकते हैं या इस मार्क का उपयोग कर सकते हैं ::: Sth
वैज्ञानिक_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
आप दो कॉलन "::" का भी उपयोग कर सकते हैं। बैच फ़ाइल चलाने पर उस लाइन को प्रदर्शित या निष्पादित किए बिना बैच फ़ाइल में टिप्पणी जोड़ने के दो तरीकों में से एक है। रेम के विपरीत यह रेखा इस बात की परवाह किए बिना नहीं दिखाई देगी कि बैच फ़ाइल में ECHO बंद है या नहीं।
ब्रेंट81

12
@ Brent81 मुझे लगता है कि यह सही उत्तर होना चाहिए। आरईएम कमांड को हाइलाइट करने वाले सिंटैक्स का उपयोग करते समय वास्तव में "टिप्पणी" के रूप में पाठ को उजागर नहीं करता है।
Automatico

17
डबल-कोलन एक "अमान्य लेबल" है; यहाँ एक लेख है कि यह बताता है, और क्यों यह के प्रदर्शन बेहतर रेम से हो सकता है, और यह दांतेदार कोड ब्लॉक (केवल पर पहले अक्षर) में काम नहीं करेगा (विशेष रूप से फ्लॉपी डिस्क पर!): robvanderwoude.com/comments.php
माइकल पॉलुकोनिस

4
दिलचस्प। हालांकि मैं REM 'पूरी लाइन टिप्पणी' था और डबल कोलन 'इनलाइन टिप्पणी' थी, जैसेREM This whole line is a comment @echo off :: This comment is inline
रिचर्ड स्मिथ

@ अलहदीस, पर्ल की कॉन्फिग स्क्रिप्ट बॉर्न शेल में लिखी गई है, न कि विंडोज़ बैच पर, इसलिए यह यहाँ कैसे प्रासंगिक है? इसके अलावा, कोलन कमांड वैध बॉर्न सिंटैक्स "बोनस साइड इफेक्ट" नहीं है; यह ठीक है कि इसका उपयोग उस बॉर्न लिपि में क्यों किया गया है । इसका उपयोग #टिप्पणियों के पक्ष में किया जाता है #, क्योंकि जाहिर है, सभी गोले में एक मान्य टिप्पणी पदनाम नहीं हो सकता है कॉन्फ़िगर करने का इरादा समर्थन करना है; देखें पंक्ति 3
रोब कैनेडी

955

का उपयोग करें ::याREM

::   commenttttttttttt
REM  commenttttttttttt

लेकिन (जैसा कि लोगों ने नोट किया):

  • यदि आप इनलाइन का उपयोग करते हैं, तो आपको &वर्ण जोड़ने की आवश्यकता है :
    your commands here & :: commenttttttttttt
  • नेस्टेड लॉजिक ( IF/ELSE, FORलूप, आदि ...) के अंदर REMक्योंकि ::त्रुटि देता है।
  • :: भीतर विफल हो सकता है setlocal ENABLEDELAYEDEXPANSION

79
डबल कोलन :: साफ है। वहाँ टिप्पणी है। और इसका उपयोग एक लाइन के शुरू या मध्य में किया जा सकता है!
एटीएसआईएम

10
जब इस तरह से इनलाइन किया गया तो मेरे लिए काम नहीं किया। cd "C:\Folder" ::this throws a syntax error
शॉन रोवन

3
git add :: blah this is not a comment"घातक: पाथस्पेक 'ब्लाह किसी भी फाइल से मेल नहीं खाता है" के साथ विफल रहता है
बॉब स्टीन

19
उदाहरण के रूप में एक ही लाइन पर एक टिप्पणी के लिए, आपको &कोड और टिप्पणी के बीच जोड़ना होगा ::। वर्णन करने के लिए, cmd प्रॉम्प्ट खोलें और चलाएं 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

मैं क्या कह सकता हूँ? बैच फाइलें लंबे समय से चले जाने के अवशेष हैं, वे क्लूनी और बदसूरत हैं।

आप इस वेबसाइट पर अधिक पढ़ सकते हैं ।

संपादित करें: उदाहरण को थोड़ा संशोधित करने के लिए इसमें वे तत्व शामिल हैं जिनकी आप स्पष्ट रूप से तलाश कर रहे हैं।


31

आरईएम के बजाय उन दिनों में अधिमानतः उपयोग किया जाता था जो कंप्यूटर बहुत तेज नहीं थे। REM'ed लाइन पढ़ी जाती है और फिर अंतर्वर्धित की जाती है। :: 'एड लाइन को सभी तरह से नजरअंदाज किया जाता है। यह "पुराने दिनों" में आपके कोड को गति दे सकता है। आगे एक REM के बाद आपको एक स्थान की आवश्यकता है, :: आप नहीं।

और जैसा कि पहली टिप्पणी में कहा गया है: आप किसी भी लाइन में जानकारी जोड़ सकते हैं जिसे आप की आवश्यकता महसूस करते हैं

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

भागों के लंघन के लिए के रूप में। हर लाइन के सामने आरईएम लगाने से समय लग सकता है। जैसा कि भागों को छोड़ने के लिए GOTO का उपयोग करके कोड के बड़े टुकड़ों को छोड़ने का एक आसान तरीका है। सेट करना सुनिश्चित करें: उस बिंदु पर लेबल जिसे आप कोड जारी रखना चाहते हैं।

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
बिना पढ़े डबल-लाइन लाइन को कैसे नजरअंदाज किया जा सकता है? दुभाषिया को दोहरे-औपनिवेशिक रेखा के रूप में पहचानने से पहले दुभाषिया को पहले नहीं पढ़ा जाना चाहिए?
रोब कैनेडी

2
@RobKennedy जैसा कि मैंने उत्तर पढ़ा है, यह :: के बाद कुछ भी नहीं पढ़ता है, जहां REM के बाद सब कुछ पढ़ा जाता है।
जेम्स जेनकिंस

5
अगर कमांड इंटरप्रेटर पढ़ना बंद कर देता है , तो @James, तो यह कभी भी फाइल को नहीं करेगा। यह स्पष्ट रूप से यह जानने के लिए पढ़ना जारी रखने की आवश्यकता है कि टिप्पणी कहाँ समाप्त होती है और फ़ाइल की अगली पंक्ति कहाँ से शुरू होती है। इसके साथ ::और remसमान रूप से करना है।
रोब कैनेडी

2
@RobKennedy, मुझे भी लगा कि यह निहित है कि यह केवल उस लाइन पर लागू होता है जो कमांड चालू थी।
जेम्स जेनकिंस

7
@RobKennedy यह है पढ़ा है, लेकिन यह नहीं है पार्स (या प्रक्रिया) यह क्या लिखा है, यह सिर्फ अगले जब तक छोड़ देता है \nऔर उसके बाद फिर पार्सिंग आरंभ [उद्धरण वांछित]
xDaizu

25

मल्टी लाइन टिप्पणियां

यदि बड़ी संख्या में लाइनें आप टिप्पणी करना चाहते हैं तो बेहतर होगा कि आप हर पंक्ति को टिप्पणी करने के बजाय मल्टी लाइन टिप्पणी कर सकें।

टिप्पणी पोस्ट पर रोब वैन डेर वूडे की इस पोस्ट को देखें :

बैच भाषा में टिप्पणी ब्लॉक नहीं हैं, हालांकि प्रभाव को पूरा करने के तरीके हैं।

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 स्क्रिप्ट्स में किया जाता है, हालाँकि वे stackoverflow.com/q/9074476/995714 ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/31212715/995714ifgoto
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आदेश: ::, grey, on, blue

यह केवल इस प्रकार काम करेगा:

color 17     &      :: grey on blue

तो एम्परसेंड अपरिहार्य है।


अन्य उत्तरों से, ऐसा लगता है कि एम्परसेंड की आवश्यकता नहीं है?
RoG

3
@Snaptastic - अन्य उत्तर वास्तव में इस बिंदु पर गलत हैं, मेरा हालिया संपादन देखें।
मिक्रोक्लेव

यह सही तरीका लगता है; यहां तक ​​कि यह मेरी आईडीई में टिप्पणी के रूप में भी उजागर होता है।
बाबूराव

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 के उत्तर पर आधारित है। मैंने महसूस किया कि उनका उत्तर अच्छा था, लेकिन कुछ महत्वपूर्ण विवरणों को छोड़ दिया, लेकिन उन्होंने मेरा संपादन वापस कर दिया, इसलिए मैं अपने संशोधन को अपने उत्तर में बदल रहा हूं।
पीकमेंडर 2

Pikamander2, आपका पुनरीक्षण (भी, उपयोगकर्ता द्वारा इंगित किया @Rado गया था, उस समय उत्तर में मिला दिया गया था और उसके लिए धन्यवाद, बस मैंने उत्तर के लिए एक और स्टाइल पसंद किया और अलग स्टाइल का इस्तेमाल किया।
T.Todua

1

यह एक पुराना विषय है और मैं इस दिलचस्प विषय के ज्ञान का विस्तार करने के लिए अपनी समझ जोड़ना चाहूंगा।

REM और :: के बीच महत्वपूर्ण अंतर है:

REM स्वयं एक कमांड है, जबकि :: नॉट।

हम इलाज कर सकते हैं :: एक टोकन के रूप में कि जैसे ही सीएमडी पार्सर एक लाइन में पहला गैर-रिक्त स्थान का सामना करता है, यह :: टोकन है, यह पूरी लाइन को छोड़ देगा और अगली पंक्ति पढ़ेगा। इसीलिए REM को कम से कम एक रिक्त स्थान का अनुसरण करना चाहिए, जो लाइन के लिए एक टिप्पणी के रूप में कार्य कर सकता है, जबकि :: इसके पीछे किसी रिक्त स्थान की आवश्यकता नहीं है।

वह REM एक कमांड है जिसे सिंटैक्स के लिए निम्न में से सबसे अच्छा समझा जा सकता है

मूल सिंटैक्स इस प्रकार है

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

बस सुनिश्चित करें कि आप कभी भी बंद कोष्ठक का उपयोग नहीं करते हैं।

विशेषताएँ: https://www.robvanderwoude.com/comments.php पर लियो गुटिरेज़ रामिरेज़

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.