Hi, Axelito!
Nur ergänzend i.S. „call“-Aufruf:
Ich will ein Batch-File schaffen mit dem ich Dateiausführungen
nacheinander abarbeiten kann.
Beispiel:
program1 %1 %2
program1 %3 %4
program1 %5 %6
wobei sich, wie man sieht, nur die eingabe und ausgabe ändert.
Leider ruft er nur die erste Zeile auf und beendet danach das
Batchfile. Kann das an dem Programm (Program1) liegen oder muß
ich etwas im Batch-File beachten, so daß alle Zeilen
abgearbeitet werden.
Wenn es sich bei „program1“ um ein .exe- oder .com-Programm handelt, wird der Aufruf nicht abgebrochen (sollte zumindest nicht). Das passiert nur bei Batches. So nehme ich an, dass „program1“ eigentlich „program1.bat“ ist.
Um Batches innerhalb Batches auszuführen, muss dann eben der Aufruf
call program1 %1 %2
rem usw.
lauten. Statt „call“ lässt sich auch ein weiterer Kommando-Interpreter mit „command /c“ vorschalten; weil das allerdings ein klein wenig mehr Speicher braucht und ein bisschen langsamer geht – ist ja ein weiterer Programmaufruf – macht man das nur in Ausnahmefällen, zum Beispiel, wenn bestimmte Umgebungsvariablen nicht oder erneut berücksichtigt werden sollen.
Der Trick, ohne „call“ zu arbeiten lässt sich übrigens da ausnutzen, wo ein anderer Batch die Stapelverarbeitung weiterführen soll – oder eben ein zweiter Batch den ersten beenden soll.
So lässt sich eine leere Datei, sagen wir namens „cancel.bat“ anlegen, die dann „ohne call“ den ersten Batch beendet. (Das macht natürlich nur Sinn, wenn Du Bedingungen mit „if … goto …“ im Batch abfragst. Sinn, dieses Verfahren anzuwenden, bekommt es dann, wenn Du sehr lange Batches hast, weil dann der goto-Befehl zur Sprungmarke (z.B. „Goto End“) länger dauert als der Aufruf „cancel.bat“.
Dein Beispiel:
program1 %1 %2
program1 %3 %4
program1 %5 %6
…würde ich mit Hilfe des „shift“-Befehls lösen, der die Parameter je um eine Stelle verschiebt:
\_ :Loop
\_\_ program1 %1 %2
\_\_ shift
\_\_ shift
\_\_ if not %2!==! goto Loop
\_ :End
2x shift verschiebt die Parameter %3 und %4 an die Stellen %1 und %2. Die „if not“-Abfrage prüft, ob noch Parameter %2 folgt. Wenn Parameter %2 fehlt geht der Vergleich mit „!==!“ (Ausrufezeichen ist gleich Ausrufezeichen) auf und führt nicht zu einer Fehlermeldung, der Batch wird regulär beendet.
Na, gut. Das war ein kleiner Ausflug in die DOS-Welt.
CU DannyFox64 