Ich habe eine Batchdatei, die mehrere Python-Skripts ausführt, die Tabellenänderungen vornehmen.
Ich möchte, dass Benutzer die 1-2 Python-Skripts auskommentieren, die sie nicht ausführen möchten, anstatt sie aus der Batchdatei zu entfernen (damit der nächste Benutzer diese Skripts als Optionen kennt!)
Ich möchte auch Kommentare hinzufügen, um sie auf die Variablen aufmerksam zu machen, die sie vor dem Ausführen in der Batch-Datei aktualisieren müssen. Ich sehe, dass ich REM
verwenden kann. Es sieht jedoch so aus, als wäre dies mehr für die Aktualisierung des Benutzers mit dem Fortschritt, nachdem er ausgeführt wurde.
Gibt es eine Syntax für das richtige Hinzufügen eines Kommentars?
Der Befehl rem
ist in der Tat für Kommentare. Nach dem Ausführen des Skripts werden keine Benutzer von Natur aus aktualisiert. Einige Skriptautoren verwenden sie möglicherweise anstelle von echo
auf diese Weise, da der Batch-Interpreter standardmäßig jeden Befehl vor der Verarbeitung druckt. Da rem
-Befehle nichts tun, können sie ohne Nebeneffekte gedruckt werden. Um zu vermeiden, dass ein Befehl gedruckt wird, voranstellen Sie ihn mit @
, oder führen Sie @echo off
aus, um diese Einstellung im gesamten Programm anzuwenden. (Es ist echo off
, um das Drucken weiterer Befehle zu vermeiden; der @
soll das Drucken von diesem Befehl verhindern, bevor die Echoeinstellung wirksam wird.)
In Ihrer Batch-Datei könnten Sie also Folgendes verwenden:
@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py
::
oder REM
:: commenttttttttttt
REM commenttttttttttt
&
hinzufügen:your commands here & :: commenttttttttttt
IF/ELSE
, FOR
-Schleifen usw.)REM
, da ::
einen Fehler gibt.::
kann innerhalb von setlocal ENABLEDELAYEDEXPANSION
fehlschlagen Nein, normale alte Batchdateien verwenden REM
als Kommentar. ECHO
ist der Befehl, der etwas auf dem Bildschirm druckt.
Zum Auskommentieren von Abschnitten der Datei können Sie GOTO
verwenden. Ein Beispiel für alle 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 aus längst vergangenen Zeiten, sie sind klobig und hässlich.
Sie können mehr auf dieser Website lesen.
BEARBEITEN: Das Beispiel wurde etwas geändert, damit es die Elemente enthält, nach denen Sie scheinbar gesucht haben.
Das :: anstelle von REM wurde vorzugsweise an den Tagen verwendet, an denen Computer nicht sehr schnell waren. Die REM-Zeile wird gelesen und anschließend ignoriert. :: 'ed line werden den ganzen Weg ignoriert. Dies könnte Ihren Code in "den alten Tagen" beschleunigen. Weiterhin benötigen Sie nach einem REM ein Leerzeichen, nach :: Sie nicht.
Und wie im ersten Kommentar gesagt: Sie können jeder Zeile, die Sie für notwendig erachten, Informationen hinzufügen
SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS
Was das Überspringen von Teilen betrifft . Das Setzen von REM vor jeder Zeile kann recht zeitaufwändig sein . Wie bereits erwähnt, können Sie mit GOTO zum Überspringen von Teilen große Teile des Codes überspringen. Stellen Sie sicher, dass Sie ein: LABEL an der Stelle setzen, an der der Code fortgesetzt werden soll.
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
Wenn Sie eine große Anzahl von Zeilen auskommentieren möchten, ist es besser, wenn Sie mehrzeilige Kommentare machen können, als jede Zeile auskommentieren zu müssen.
Die Batch-Sprache hat keine Kommentarblöcke, obwohl es Möglichkeiten gibt, den Effekt zu erzielen.
GOTO EndComment1
This line is comment.
And so is this line.
And this one...
:EndComment1
Sie können GOTO
Label und: Label für Blockkommentare verwenden.
Oder: Wenn der Kommentarblock am Ende der Batchdatei angezeigt wird, können Sie am Ende des Codes EXIT
und dann eine beliebige Anzahl von Kommentaren zum Verständnis eingeben.
@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...
& :: comment
color C & :: set red font color
echo IMPORTANT INFORMATION
color & :: reset the color to default
Erklärung:
&
trennt zwei Befehle , in diesem Fall ist color C
der erste Befehl und :: set red font color
der zweite.
Diese Aussage mit Kommentar sieht intuitiv korrekt aus:
goto error1 :: handling the error
aber es ist keine gültige Verwendung des Kommentars. Es funktioniert nur, weil goto
alle Argumente nach dem ersten ignoriert. Der Beweis ist einfach, das goto
wird auch nicht fehlschlagen:
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 Befehl color
nicht bekannt sind: ::
, grey
, on
, blue
.
Es funktioniert nur als:
color 17 & :: grey on blue
Das kaufmännische Und ist daher unvermeidlich.
Sie können etwas mit ::
oder REM
auskommentieren:
your commands here
:: commenttttttttttt
oder
your commands here
REM commenttttttttttt
Um dies in der gleichen 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
::
in verschachtelter Logik (IF-ELSE
, FOR
-Schleifen usw.) verursacht einen Fehler. Verwenden Sie in diesen Fällen stattdessenREM
.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 leere Feld in einer Zeile trifft, dieses :: Token ist, die gesamte Zeile übersprungen und die nächste Zeile gelesen wird. Aus diesem Grund sollte auf REM mindestens ein Leerzeichen folgen, um als Kommentar für die Zeile fungieren zu können, während :: dahinter kein Leerzeichen benötigt.
Dass REM selbst ein Befehl ist, kann am besten aus der folgenden FÜR -Syntax verstanden werden
Die grundlegende FOR-Syntax lautet wie folgt
FOR %v in (set) DO <Command> [command param]
hier kann <Command>
ein beliebiger gültiger Befehl sein So können wir die folgende gültige Befehlszeile schreiben, da rem
ein Befehl ist
FOR %i in (1,2,3) DO rem echo %i
Wir können jedoch die folgende Zeile NICHT schreiben, da ::
kein Befehl ist
FOR %i in (1,2,3) DO :: echo %i