Ich habe eine riesige MS DOS Batch-Datei geschrieben. Um diese Batch-Datei zu testen, muss ich nur einige Zeilen ausführen und möchte die verbleibenden Zeilen ausblenden / auskommentieren.
Ich habe einige vorhandene Kommentarzeilen, beginnend mit, ::
daher kann ich sie nicht ::
mehr verwenden, da dadurch alle Kommentare verschlüsselt werden.
Wie kann ich dieses Problem lösen?
batch-file
comments
dos
user219628
quelle
quelle
REM
Zeilen einfach nicht als Kommentarzeilen akzeptieren.Wenn Sie REM am Anfang jeder Zeile hinzufügen möchten, anstatt GOTO zu verwenden, können Sie Notepad ++ verwenden, um dies einfach zu tun, indem Sie die folgenden Schritte ausführen:
Wiederholen Sie die Schritte zum Kommentieren
quelle
Ctrl-Q
, klicken Sie aufNotepad++
:Edit -> Comment/Uncomment
.Die
goto
Lösung ist zwar eine gute Option, funktioniert jedoch nicht in Klammern (einschließlich FOR- und IF-Befehlen). Dies ist jedoch der Fall. Sie sollten jedoch vorsichtig sein, wenn Sie Klammern und ungültige Syntax fürFOR
undIF
Befehle schließen, da diese analysiert werden.Aktualisieren
Das Update in der Antwort des Dbenham gab mir einige Ideen. Erstens - es gibt zwei verschiedene Fälle, in denen wir mehrzeilige Kommentare benötigen können - im Kontext einer Klammer, in der GOTO nicht verwendet werden kann, und außerhalb davon. In Klammern Kontext können wir weitere Klammern verwenden , wenn es eine Bedingung ist , die den Code verhindert , dass der Code thede sein executed.Though wird noch analysiert werden , und einige Syntaxfehler erkannt werden (
FOR
,IF
, nicht ordnungsgemäß geschlossene Klammern, falsche Parameter Expansion ..). So Wenn es möglich ist, ist es besser, GOTO zu verwenden.Es ist zwar nicht möglich, ein Makro / eine Variable zu erstellen, die als Beschriftung verwendet wird, aber es ist möglich, Makros für die Kommentare der Klammer zu verwenden. Dennoch können zwei Tricks verwendet werden, um die GOTO-Kommentare symmetrischer und ansprechender zu machen (zumindest für mich). Dafür verwende ich zwei Tricks: 1) Sie können ein einzelnes Symbol vor ein Etikett setzen und goto wird es immer noch finden (ich habe keine Ahnung, warum das so ist. Meine Vermutungen, dass es nach einem Laufwerk sucht). 2) Sie können eine Single
:
am Ende eines Variablennamens einfügen, und eine Ersetzungs- / Untertretungsfunktion wird nicht ausgelöst (auch nicht bei aktivierten Erweiterungen). In Kombination mit den Makros für Kommentare in Klammern können beide Fälle fast gleich aussehen.Hier sind die Beispiele (in der Reihenfolge, in der sie mir am besten gefallen):
Mit rechteckigen Klammern :
Mit geschweiften Klammern :
Mit Klammern :
Mischung zwischen Powershell- und C- Stilen (
<
kann nicht verwendet werden, da die Umleitung mit einem höheren Prio erfolgt.*
Kann wegen der nicht verwendet werden%*
):Um zu betonen, dass dies ein Kommentar ist (dachte, es ist nicht so kurz):
quelle
rem.||(
oderrem^ (
stattdessen verwenden. Die Absicht ist etwas klarer. Siehe meine aktualisierte Antwort.%rem:%
+%:rem%
Form einschließen , um es offensichtlicher zu machen, obwohl es seinen Charme verlieren wird. Oder nur Schrägstrich, um näher am C-Stil zu sein ...Eine andere Möglichkeit besteht darin, die unerwünschten Zeilen in einen IF-Block einzuschließen, der niemals wahr sein kann
Natürlich wird nichts innerhalb des if-Blocks ausgeführt, aber es wird analysiert. Sie können also keine ungültige Syntax enthalten. Außerdem kann der Kommentar nur enthalten,
)
wenn er maskiert oder in Anführungszeichen gesetzt ist. Aus diesen Gründen ist die akzeptierte GOTO-Lösung zuverlässiger. (Die GOTO-Lösung kann auch schneller sein)Update 2017-09-19
Hier ist eine kosmetische Verbesserung der GOTO-Lösung von pdub . Ich definiere eine einfache Umgebungsvariable "Makro", die die GOTO-Kommentarsyntax ein bisschen besser selbstdokumentierend macht. Obwohl allgemein empfohlen wird, dass: Beschriftungen in einem Batch-Skript eindeutig sind, ist es wirklich in Ordnung, mehrere Kommentare wie diesen in dasselbe Batch-Skript einzubetten.
Oder Sie können eine dieser Varianten der Lösung von npocmaka verwenden . Die Verwendung von REM anstelle von BREAK macht die Absicht etwas klarer.
quelle
Ich möchte nur erwähnen, dass die GOTO-Lösung von pdub nicht vollständig korrekt ist, falls das Kommentar-Label mehrmals angezeigt wird. Ich ändere den Code aus dieser Frage als Beispiel.
Die Ausgabe wird sein
Der Befehl ECHO HERE AT TD_NEXT IN THE FIRST BLOCK wird übersprungen.
quelle
@jeb
Und nachdem Sie dies verwendet haben, scheint der stderr unzugänglich zu sein
Nein, versuchen Sie Folgendes:
Aber warum funktioniert es?
Entschuldigung, ich beantworte die Frage auf Französisch:
(la redirection par 3> est spécial car elle persiste, on va l'utiliser pour capturer le flow des erreurs 2> est on va le transformator en un flow persistant à l'ade de 3> ceci va nous permettre d'avoir une gestion Des erreur pour tout notre environement de script..par la suite si on veux recuperer le flow 'stderr' il faut faire une autre redirection du handle 2> au handle 1> qui n'est autre que la console ..)
quelle
Versuche dies:
quelle