Abarbeiten von Dateiausführungen per Batchfile

Hallo alle miteinander,

ich habe eine Frage an die User unter euch die Ahnung vom Prgrammieren von Batch-Files haben.

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.

Ich bin für jede Hilfe dankbar

Axelito

Hi Axelito,

lang, lang ist’s her! Wenn ich mich recht erinnere, sollte es mit einem CALL vor program_X flutschen. Dadurch wird die Kontrolle nach dem Abarbeiten von program_X wieder an den Batchfile zurückgegeben.

Gruß Ralf

Hallo Ralf,

der CALL-Befehl klappt wunderbar. Hatte zwar diesen Befehl unter anderem auf einer Internetseite schon gefunden, aber nicht gewußt was dieser Befehl macht.

Danke für deine Hilfe.

Cu
Axelito

Hi Axelito,

falls Du noch tiefer einsteigen möchtest: In der aktuellen c’t (Heft 16) steht ein recht ausführlicher Artikel über die Batch-Programmierung.

Gruß
Uwe

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

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 :smile: