Ich habe eine Batch-Datei und möchte eine externe Datei einschließen, die einige Variablen enthält (z. B. Konfigurationsvariablen). Ist es möglich?
batch-file
Pablo
quelle
quelle
Antworten:
Hinweis: Ich gehe von Windows-Batchdateien aus, da die meisten Leute anscheinend nicht wissen, dass es signifikante Unterschiede gibt, und einfach blind alles mit grauem Text auf schwarzem Hintergrund unter DOS aufrufen. Trotzdem sollte die erste Variante auch unter DOS funktionieren.
Ausführbare Konfiguration
Der einfachste Weg, dies zu tun, besteht darin, die Variablen einfach selbst in eine Batch-Datei zu setzen, jede mit ihrer eigenen
set
Anweisung:und in Ihrer Hauptcharge:
Auf diese Weise können Variablen natürlich auch bedingt oder abhängig von Aspekten des Systems erstellt werden, sodass es ziemlich vielseitig ist. Dort kann jedoch beliebiger Code ausgeführt werden. Wenn ein Syntaxfehler auftritt, wird auch Ihr Hauptstapel beendet. In der UNIX-Welt scheint dies ziemlich häufig zu sein, insbesondere bei Shells. Und wenn Sie darüber nachdenken,
autoexec.bat
ist nichts anderes.Schlüssel / Wert-Paare
Ein anderer Weg wäre eine Art von
var=value
Paaren in der Konfigurationsdatei:Sie können dann das folgende Snippet verwenden, um sie zu laden:
Dies verwendet einen ähnlichen Trick wie zuvor, nämlich nur
set
in jeder Zeile. Die Zitate gibt es Dinge zu entkommen wie<
,>
,&
,|
. Sie werden jedoch selbst unterbrochen, wenn Anführungszeichen in der Eingabe verwendet werden. Außerdem müssen Sie immer vorsichtig sein, wenn Sie Daten in Variablen weiterverarbeiten, die mit solchen Zeichen gespeichert sind.Im Allgemeinen scheint es mir ziemlich unmöglich, willkürlichen Eingaben automatisch zu entkommen, um keine Kopfschmerzen oder Probleme in Batch-Dateien zu verursachen. Zumindest habe ich noch keinen Weg gefunden, dies zu tun. Mit der ersten Lösung übertragen Sie diese Verantwortung natürlich auf diejenige, die die Konfigurationsdatei schreibt.
quelle
Wenn die externe Konfigurationsdatei auch eine gültige Batchdatei ist, können Sie einfach Folgendes verwenden:
in Ihrem Skript. Versuchen Sie, folgendes a.bat zu erstellen:
und b.bat:
Das Ausführen von a.bat sollte folgende Ausgabe generieren:
quelle
call
, was übrigens synchron ist), heißt es "Der Prozess kann nicht auf die Datei zugreifen, weil sie verwendet wird" und kann nicht aufgerufen werden.Batch verwendet die Klammern kleiner als und größer als als Eingabe- und Ausgaberohre.
Wenn Sie wie oben nur eine Ausgabeklammer verwenden, werden alle Informationen in dieser Datei überschrieben.
Wenn Sie die doppelte rechte Klammer verwenden, wird die nächste Zeile zur Datei hinzugefügt.
Dadurch werden die Parameter basierend auf den Zeilen der Datei ausgeführt. In diesem Fall verwenden wir zwei Zeilen, die mit "echo" eingegeben werden. Die linke Klammer, die die rechte Klammer berührt, bedeutet, dass die Informationen aus dieser Datei in diese Zeilen geleitet werden.
Ich habe eine Nur-Beispiel-Lese- / Schreibdatei zusammengestellt. Unten ist die Datei in Abschnitte unterteilt, um zu erklären, was jedes Teil tut.
SRU kann in diesem Beispiel alles sein. Wir stellen es tatsächlich ein, um einen Absturz zu verhindern, wenn Sie zu schnell die Eingabetaste drücken.
Jetzt müssen wir die Variablen in eine Datei schreiben.
Ich benutze .cdb als Kurzform für "Command Database". Sie können eine beliebige Erweiterung verwenden. Im nächsten Abschnitt wird der Code von Grund auf getestet. Wir möchten nicht die Set-Variablen verwenden, die am Anfang der Datei ausgeführt wurden, sondern sie aus der soeben geschriebenen settings.cdb laden.
Wir haben also nur die ersten beiden Informationszeilen weitergeleitet, die Sie am Anfang der Datei geschrieben haben (Sie können die Einstellung der zu überprüfenden Zeilen überspringen, um sicherzustellen, dass sie funktioniert), um die Variablen input und input2 festzulegen.
Dies zeigt die Informationen an, die festgelegt wurden, während settings.cdb in die Klammer geleitet wurde. Als zusätzliche Motivation für einen guten Job wird durch Drücken der Eingabetaste und Festlegen der Standardwerte, die wir zuvor als "1" festgelegt haben, eine gute Jobnachricht zurückgegeben. Die Verwendung der Halterungsrohre erfolgt in beide Richtungen und ist viel einfacher als das Einstellen des "FOR" -Stücks. :) :)
quelle
Also musst du das einfach richtig machen?:
quelle
Ausgabe:
$ RunCount = 1
$ RunCount = 2
$ RunCount = 3
Die oben beschriebene Technik kann auch verwendet werden, um Variablen für mehrere Batchdateien freizugeben.
Quelle: http://www.incodesystems.com/products/batchfi1.htm
quelle
Ein bisschen altes Thema, aber ich hatte vor ein paar Tagen die gleiche Frage und kam auf eine andere Idee (vielleicht findet es noch jemand nützlich)
Sie können beispielsweise eine config.bat mit verschiedenen Themen (Familie, Größe, Farbe, Tiere) erstellen und diese einzeln in beliebiger Reihenfolge in Ihren Batch-Skripten beliebig anwenden:
Danach können Sie es überall verwenden, indem Sie vollständig mit 'call config.bat all' aufrufen oder nur Teile davon aufrufen (siehe Beispiel unten). Die Idee hier ist, dass es manchmal praktischer ist, wenn Sie die Option haben, nicht alles aufzurufen Einmal. Einige Variablen möchten möglicherweise noch nicht aufgerufen werden, damit Sie sie später aufrufen können.
Beispiel test.bat
Ich hoffe, es hilft der Art und Weise, wie andere mir hier mit ihren Antworten helfen.
Eine kurze Version des oben genannten:
config.bat
test.bat
Schönen Tag.
quelle
Vergessen wir nicht die guten alten Parameter. Beim Starten Ihrer * .bat- oder * .cmd-Datei können Sie nach dem Namen der Befehlsdatei bis zu neun Parameter hinzufügen:
Beispielskript
Die myscript.bat könnte ungefähr so aussehen:
Beispielausgabe
quelle
Beim Versuch, die Methode mit einer auslösbaren Konfiguration zu verwenden, habe ich festgestellt, dass sie möglicherweise funktioniert oder NICHT, je nachdem, wo sich der Aufruf im Skript befindet:
Rufen Sie config.cmd auf
Ich weiß, dass es keinen Sinn ergibt, aber für mich ist es eine Tatsache. Wenn sich "call config.cmd" oben im Skript befindet, funktioniert es, aber wenn es weiter im Skript ist, funktioniert es nicht.
Mit funktioniert nicht, ich meine, die Variablen werden nicht im aufrufenden Skript gesetzt.
Sehr sehr seltsam !!!!
quelle