2016-04-17 10 views
6

Ich habe eine test.cmd Datei mit dem folgenden Befehl:Wie öffne ich ein neues cmd-Fenster und führe eine for-Schleife darin aus?

call "cmd /c start echo foo && pause" 
call "cmd /c start for /l %%x in (0, 1, 2) do python test.py config%%x" 

Der erste Befehl funktioniert prima und zeigt, dass der allgemeine Ansatz funktionieren soll. Der zweite mit der for-Schleife bereitet mir Probleme.

Wenn ich diesen Befehl direkt in einem CMD-Fenster (mit nur einem% -Zeichen vor dem Iterator) ausführe, startet er mein Python-Skript "test.py" in einem neuen CMD-Fenster dreimal wie erwartet in einer Schleife.

Wenn ich denselben Befehl von meinem test.cmd (diesmal mit zwei% natürlich) ausführen, erscheint das neue CMD-Fenster und ist sofort weg. Ich bekomme keine Fehlermeldungen und kann das neue Fenster nicht behalten.

Ich vermute, dass ich etwas mehr Codierung durchführen muss, aber ich kann die richtige Syntax nicht herausfinden. Was muss ich ändern, damit diese for-Schleife von meinem test.cmd ausgeführt wird?

Antwort

5

wenn Sie darauf bestehen, call verwenden, gibt es eine andere Ebene der Analyse, so in einer Batch-Datei Sie verwenden müssen:

call "cmd /k start for /l %%%%i in (1,1,10) do echo %%%%i" 

(/c mit /k ersetzt die Ausgabe zu sehen) Diese Antwort

+0

Oh! Das funktioniert wie ein Zauber. Vielen Dank! – Demento

2

versuchen Sie dies:

call "cmd /c for /l %x in (0, 1, 2) do @python test.py config%x" 

wenn Sie Schleifen in Eingabeaufforderung ausführen müssen Sie einzelne Prozentsatz Symbol. Und Sie müssen den Startbefehl nach dem cmd /c entfernen, weil for ist interner Cmd-Befehl. @ dient zum Unterdrücken des Eingabeaufforderungswerts bei jeder Iteration.

+0

Ihre Lösung funktioniert von der Cmd-Linie, aber scheitert, wenn ich es über meine test.cmd starte. Ich erhalte die folgende Fehlermeldung. C: \> Aufruf "cmd/c für/lx" x "war zu dieser Zeit unerwartet. – Demento

+1

@Demento Warum verwenden Sie nicht einfach in Ihrer' test.cmd' die Zeile 'for/L %% x in (0,1,2) tue python.exe test.py config %% x ', da dies für mich mehr Sinn macht? – Mofi

+0

@Demento - Um dies aus Batch-Skript verwenden, müssen Sie die Prozentzeichen zu verdoppeln. – npocmaka

1

erläutert die Kernfrage, die im Titel Ihres Posts steht, und nicht den von Ihnen bereitgestellten Beispielcode.


auszuführen wird ein for Schleife in einer separaten (cmd) Fenster, das start Befehl benötigt wird. Außerdem sollte eine explizite cmd Instanz angegeben werden, um Probleme beim Aufruf interner Befehlszeilen mit start zu vermeiden (z. B. können Klammern Fehler verursachen) und darüber hinaus die Kontrolle darüber haben, was mit dem neuen Fenster nach Abschluss der Schleife geschieht.

Die folgende Befehlszeile führt eine for Schleife in einem neuen Fenster cmd, die offen bleibt, nachdem die Schleife (für die Fehlersuche sehr hilfreich) beendet:

start "" /WAIT cmd /K "for /L %%X in (0,1,2) do echo %%X" 

Typ exit in das neue Fenster, um es zu schließen. Um das neue Fenster endgültig zu schließen, ersetzen Sie durch /C.

Wenn Sie nicht möchten, dass Ihr Hauptscriptscript auf den Abschluss der Schleife wartet und das neue Fenster geschlossen wird, entfernen Sie den Schalter /WAIT. Auf diese Weise wird die Befehlszeile gestartet, aber das Hauptscript wird sofort weiter ausgeführt. Dadurch können Sie mehrere for Loops gleichzeitig in separaten Fenstern ausführen.


Diese Technik wird for Schleifen Aufruf nur beschränkt.

Verwandte Themen