Ich versuche, einige einfache Batch-Befehle in einem Batch auszuführen.
Dabei ist jeder Befehl ein Batch-Befehl wie folgt:
rails generate scaffold illness name:string
rails generate scaffold ingredient name:string origin_id:integer
Anstatt alle 30 Befehle auszuführen, führt meine Batchdatei jetzt nur den ersten aus und kehrt zur Eingabeaufforderungszeile zurück. Ich muss sie also manuell ausführen.
Antwort1
Sie müssen das Wort call
vor die Batchdatei setzen...
@echo aus Rufen Sie Schienen auf, um ein Gerüst für die Krankheit zu generieren. Name: Zeichenfolge rufe Ralis auf, erstelle Gerüstbestandteilname: Zeichenfolge, Ursprungs-ID: Ganzzahl
Dies setzt voraus, dass „Rails“ tatsächlich rails.bat ist.
Antwort2
Die vorherige Antwort von jftuga ist zwar richtig, die vollständigere Antwort lautet jedoch wie folgt:
@echo off
call rails generate scaffold illness name:string
call ralis generate scaffold ingredient name:string origin_id:integer
Sie müssen eineAnrufvor jeder Zeile in der Batchdatei, die ein externer Befehl ist, der einen neuen Prozess auslöst, wenn Sie möchten, dass das Skript nach jedem Aufruf fortgesetzt wird. Interne Befehle wie DIR und COPY erfordern also keinen Aufruf. Wenn Sie jedoch eine neue Eingabeaufforderung oder sogar eine andere Batchdatei ausführen, wird die Kontrolle vollständig an dieses Programm übergeben, es sei denn, das WortANRUFsteht am Anfang der Zeile. Tatsächlich übergibt die neue Eingabeaufforderung die Kontrolle an die Batchdatei zurück, sobald SieAusfahrtEs.
Einige Programme werden während ihrer Ausführung angehalten, kehren aber nach Abschluss zur nächsten Zeile der Batchdatei zurück. In der folgenden Batchdatei wird das Skript nach jedem Aufruf von Notepad auf die gleiche Weise angehalten und gestartet, nachdem Notepad beendet wurde (beide Male). Sie sind also praktisch gleich.
notepad.exe
call notepad.exe
echo It came back.
Beim Aufruf einer anderen Batchdatei wird jedoch die vollständige Kontrolle an den neuen Prozess übergeben, sofern nicht vorher ein Aufruf erfolgt. Im folgenden Code wird also der erste Aufruf einer Bat-Datei nach Abschluss zurückgegeben, der zweite jedoch nie, sodass die letzte Echozeile nie ausgeführt wird. call firstBatch.bat SecondBatch.bat echo Sie werden diese Zeile nie sehen
Ich bin mir nicht sicher, wie der Rails-Befehl funktioniert, aber es scheint wie eine Batch-Sitzung zu sein. Vielleicht war es eine Batch-Datei. Die ersten beiden Aufrufe von cmd kehren erst zurück, wenn Sie in dieser Instanz exit eingeben und zur vorherigen Shell zurückkehren. DieAnrufist irrelevant. Aber der dritte verwendet den Schalter /c, der besagt, dass der Befehl ausgeführt und automatisch zurückgegeben werden soll. Wenn Sie die neue cmd-Sitzung aktiv halten möchten, nachdem Sie ihr einen Befehl gesendet haben, verwenden Sie den Schalter /K. Weitere Hilfe hierzu:cmd /?
cmd
call cmd
cmd /c dir
echo You will see this after typing Exit twice to leave two new instances of cmd. The third instance returned automatically.