Wie kann man in einem Stapel / cmd „auskommentieren“ (Kommentar hinzufügen)?


881

Ich habe eine Batch-Datei, die mehrere Python-Skripte ausführt, die Tabellenänderungen vornehmen.

  1. Ich möchte, dass Benutzer die 1-2 Python-Skripte auskommentieren, die sie nicht ausführen möchten, anstatt sie aus der Batch-Datei zu entfernen (damit der nächste Benutzer weiß, dass diese Skripte als Optionen vorhanden sind!).

  2. Ich möchte auch Kommentare hinzufügen, um sie auf die Variablen aufmerksam zu machen, die sie in der Batch-Datei aktualisieren müssen, bevor sie ausgeführt werden. Ich sehe, dass ich verwenden kann REM. Es sieht jedoch so aus, als ob dies eher dazu dient, den Benutzer nach dem Ausführen mit dem Fortschritt zu aktualisieren.

Gibt es eine Syntax zum angemesseneren Hinzufügen eines Kommentars?


6
Siehe auch ausgezeichnete Antworten hier stackoverflow.com/q/12407800/1011025
ndemou

2
Sie können Rem SthBefehl verwenden oder dieses Zeichen verwenden::: Sth
Wissenschaftler_7

Antworten:


879

Der remBefehl ist in der Tat für Kommentare. Nach dem Ausführen des Skripts wird niemand von Natur aus aktualisiert. Einige Skriptautoren verwenden es jedoch möglicherweise auf diese Weise echo, da der Batch-Interpreter standardmäßig jeden Befehl druckt, bevor er verarbeitet wird. Da remBefehle nichts bewirken, ist es sicher, sie ohne Nebenwirkungen zu drucken. Um das Drucken eines Befehls zu vermeiden, stellen Sie ihm ein Präfix voran @oder führen Sie diese Einstellung im gesamten Programm aus @echo off. ( echo offUm @zu vermeiden, dass weitere Befehle gedruckt werden; dies soll vermieden werden, dass dieser Befehl gedruckt wird , bevor die Echoeinstellung wirksam wird.)

In Ihrer Batch-Datei können Sie also Folgendes verwenden:

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

405
Sie können auch zwei Doppelpunkte "::" verwenden. Es ist eine von zwei Möglichkeiten, der Batchdatei Anmerkungen hinzuzufügen, ohne diese Zeile anzuzeigen oder auszuführen, wenn die Batchdatei ausgeführt wird. Im Gegensatz zu REM wird diese Zeile nicht angezeigt, unabhängig davon, ob sich ECHO off in der Batch-Datei befindet.
Brent81

12
@ Brent81 Ich denke, das sollte die richtige Antwort sein. Bei Verwendung der Syntaxhervorhebung hebt der REM-Befehl den Text nicht als "auskommentiert" hervor.
Automatico

17
Der Doppelpunkt ist eine "ungültige Bezeichnung". In diesem Artikel wird erklärt, warum die Leistung möglicherweise besser ist als bei REM (insbesondere auf Disketten!). In eingerückten Codeblöcken (nur beim ersten Zeichen) funktioniert
Michael Paulukonis

4
Interessant. Ich dachte, REM war der "ganze Zeilenkommentar" und der Doppelpunkt war der "Inline-Kommentar", wieREM This whole line is a comment @echo off :: This comment is inline
Richard Smith

@Alhadis, Perls Konfigurationsskript ist in der Bourne-Shell geschrieben, nicht im Windows-Batch. Wie ist es hier relevant? Darüber hinaus ist der Doppelpunktbefehl, der eine gültige Bourne-Syntax ist, kein "Bonus-Nebeneffekt". Genau deshalb wird es in diesem Bourne-Skript verwendet . Es wird zugunsten von #Kommentaren verwendet, da es #möglicherweise nicht in allen Shells, die Configure unterstützen soll, ein gültiger Kommentarbezeichner ist. siehe Zeile 3.
Rob Kennedy

955

Verwenden Sie ::oderREM

::   commenttttttttttt
REM  commenttttttttttt

ABER (wie die Leute bemerkt haben):

  • Wenn Sie Inline verwenden, müssen Sie &Zeichen hinzufügen :
    your commands here & :: commenttttttttttt
  • In verschachtelten Logik ( IF/ELSE, FORSchleifen usw.) verwenden, REMweil ::ein Fehler auftritt.
  • :: kann innerhalb scheitern setlocal ENABLEDELAYEDEXPANSION

79
Der Doppelpunkt :: Ist der sauberste .bat-Kommentar, den es gibt. Und es kann am Anfang oder in der Mitte einer Linie verwendet werden!
ATSiem

10
Hat bei mir nicht funktioniert, als ich so inline fertig war. cd "C:\Folder" ::this throws a syntax error
Shaun Rowan

3
Auch nicht in git add :: blah this is not a commentmit „fatal: Pfadangabe‚blah‘brachte keine Dateien gefunden , die “
Bob Stein

19
Für einen Kommentar in derselben Zeile wie im Beispiel müssen Sie &zwischen dem Code und dem Kommentar einfügen ::. Öffnen Sie zur Veranschaulichung die Eingabeaufforderung cmd und führen Sie dir ::blahsie aus, ohne den Inhalt aufzulisten .und mit ihnen zu vergleichen. dir & ::blah
Rado

19
Warnung, mit ::wird Fehler Skripte mit setlocal ENABLEDELAYEDEXPANSIONundfor
Azevedo

50

Nein, einfache alte Batch-Dateien werden REMals Kommentar verwendet. ECHOist der Befehl, der etwas auf dem Bildschirm druckt.

Zum "Auskommentieren" von Abschnitten der Datei, die Sie verwenden können GOTO. Ein Beispiel für all diese Befehle / Techniken:

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

Was kann ich sagen? Batch-Dateien sind ein Relikt vergangener Zeiten, sie sind klobig und hässlich.

Sie können mehr auf dieser Website lesen .

BEARBEITEN: Das Beispiel wurde ein wenig geändert, damit es die Elemente enthält, nach denen Sie anscheinend suchen.


31

Das :: anstelle von REM wurde vorzugsweise in den Tagen verwendet, in denen Computer nicht sehr schnell waren. REM'ed-Zeilen werden gelesen und dann ignoriert. :: 'ed Zeilen werden vollständig ignoriert. Dies könnte Ihren Code in "den alten Tagen" beschleunigen. Darüber hinaus benötigen Sie nach einem REM ein Leerzeichen, nach :: nicht.

Und wie im ersten Kommentar gesagt: Sie können jeder Zeile, die Sie benötigen, Informationen hinzufügen

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

Wie für das Überspringen von Teilen. Das Platzieren von REM vor jeder Zeile kann ziemlich zeitaufwändig sein. Wie bereits erwähnt, ist das Überspringen von Teilen mit GOTO eine einfache Möglichkeit, große Codeteile zu überspringen. Stellen Sie sicher, dass an der Stelle, an der der Code fortgesetzt werden soll, ein: LABEL festgelegt wird.

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
Wie kann eine Doppelpunktzeile ignoriert werden, ohne gelesen zu werden? Muss der Dolmetscher die Zeile nicht zuerst lesen, bevor er sie als Doppelpunktzeile erkennt?
Rob Kennedy

2
@RobKennedy Während ich die Antwort lese, liest es nichts nach dem ::, wo alles nach REM gelesen wird.
James Jenkins

5
Wenn der Befehlsinterpreter @James nicht mehr liest , wird die Datei nie mehr ausgeführt. Es muss natürlich weiter gelesen werden, um herauszufinden, wo der Kommentar endet und wo die nächste Zeile der Datei beginnt. Es hat das mit ::und remgleichermaßen zu tun .
Rob Kennedy

2
@RobKennedy, ich dachte auch, es wurde impliziert, dass es nur für die Zeile gilt, in der sich der Befehl befindet.
James Jenkins

7
@ RobKennedy es liest, aber es analysiert (oder verarbeitet) nicht, was es liest, es überspringt nur bis zum nächsten \nund beginnt dann erneut zu analysieren [Zitieren erforderlich]
xDaizu

25

Mehrzeilige Kommentare

Wenn es eine große Anzahl von Zeilen gibt, die Sie auskommentieren möchten, ist es besser, wenn Sie mehrzeilige Kommentare abgeben können, anstatt jede Zeile auskommentieren.

Siehe diesen Beitrag von Rob van der Woude zu Kommentarblöcken :

Die Batch-Sprache enthält keine Kommentarblöcke, es gibt jedoch Möglichkeiten, den Effekt zu erzielen.

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

Sie können GOTOLabel und: Label verwenden, um Blockkommentare zu erstellen.

Wenn der Kommentarblock am Ende der Batchdatei angezeigt wird, können Sie EXITam Ende des Codes und dann eine beliebige Anzahl von Kommentaren schreiben, um Ihr Verständnis zu verbessern.

@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...

Dies wird häufig in Hybrid-Batch- und VBS / JS-Skripten verwendet, obwohl sie ifanstelle von goto stackoverflow.com/q/9074476/995714 ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/34512715/995714
phuclv verwendet werden

13

Kommentare mit Befehlen in dieselbe Zeile setzen: use & :: comment

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

Erläuterung:

&trennt zwei Befehle , ist also in diesem Fall color Cder erste und :: set red font colorder zweite Befehl .


Wichtig:

Diese Aussage mit Kommentar sieht intuitiv richtig aus:

goto error1         :: handling the error

Es ist jedoch keine gültige Verwendung des Kommentars. Es funktioniert nur, weil gotoalle Argumente nach dem ersten ignoriert werden. Der Beweis ist einfach, auch dies gotowird nicht scheitern:

goto error1 handling the error

Aber ähnlicher Versuch

color 17            :: grey on blue

Die Ausführung des Befehls schlägt aufgrund von 4 Argumenten fehl, die dem nicht bekannt sind colorVollstreckungsbefehl: ::, grey, on, blue.

Es wird nur funktionieren als:

color 17     &      :: grey on blue

Das kaufmännische Und ist also unvermeidlich.


Aus anderen Antworten geht hervor, dass das kaufmännische Und nicht benötigt wird?
RoG

3
@ Snaptastic - Die anderen Antworten sind in diesem Punkt tatsächlich falsch, siehe meine letzte Bearbeitung.
Miroxlav

Dies scheint der richtige Weg zu sein; Es wird sogar als Kommentar in meiner IDE hervorgehoben.
Baburao

5

Sie können etwas auskommentieren mit ::oder REM:

your commands here
:: commenttttttttttt

oder

your commands here
REM  commenttttttttttt

 

Um dies in derselben Zeile wie ein Befehl auszuführen, müssen Sie ein kaufmännisches Und hinzufügen:

your commands here      & ::  commenttttttttttt

oder

your commands here      & REM  commenttttttttttt

 

Hinweis:

  • Die Verwendung :: in verschachtelter Logik ( IF-ELSE, FORSchleifen usw.) führt zu einem Fehler. Verwenden Sie in diesen Fällen REMstattdessen.

Dies basiert auf der Antwort von T.Todua. Ich fand, dass ihre Antwort gut war, ließ aber einige wichtige Details aus, aber sie haben meine Bearbeitung zurückgesetzt, sodass ich meine Überarbeitung in eine eigene Antwort umwandle.
Pikamander2

Pikamander2, Ihre Revision (auch, auf die der Benutzer hingewiesen hat, @Rado wurde zu diesem Zeitpunkt als Antwort zusammengeführt, und danke dafür, nur ich habe ein anderes Styling als Antwort bevorzugt und ein anderes Styling verwendet.
T.Todua

1

Dies ist ein altes Thema und ich möchte hier mein Verständnis hinzufügen, um das Wissen über dieses interessante Thema zu erweitern.

Der Hauptunterschied zwischen REM und :: ist:

REM ist selbst ein Befehl, während :: NICHT ist.

Wir können :: als Token behandeln, das, sobald der CMD-Parser auf das erste nicht leere Leerzeichen in einer Zeile stößt, dieses :: Token ist, einfach die gesamte Zeile überspringt und die nächste Zeile liest. Aus diesem Grund sollte auf REM mindestens ein Leerzeichen folgen, um als Kommentar für die Zeile fungieren zu können, während :: kein Leerzeichen dahinter benötigt.

Dass REM selbst ein Befehl ist, lässt sich am besten anhand der folgenden FOR- Syntax verstehen

Die grundlegende FOR-Syntax lautet wie folgt

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

Hier <Command>kann ein beliebiger gültiger Befehl sein. Wir können also die folgende gültige Befehlszeile wie remeinen Befehl schreiben

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

Wir können jedoch die folgende Zeile NICHT schreiben, da dies ::kein Befehl ist

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

3
Technisch gesehen ::ist es ein (ungültiges) Etikett (was sein Verhalten erklärt) und sollte daher nicht verwendet werden (obwohl es immer noch recht häufig ist)
Stephan

1

Mit dieser Syntax können Sie am Ende einer Batchdatei Kommentare hinzufügen:

@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

Stellen Sie nur sicher, dass Sie niemals schließende Klammern verwenden.

Zuschreibungen: Leo Guttirez Ramirez unter https://www.robvanderwoude.com/comments.php

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.