For Schleife unterbrechen und wieder starten.
Hi Leute, hab mal wieder eine tricky Aufgabe für euch,
Hab folgendes Batchfile geschrieben:
Erläuterung:
Damit lasse ich diverse Einträge aus der Datei "datei.dat" auslesen und starte ein Programm App1.
So weit so gut. Ich möchte nun dieses Skript nach ca. 20 Durchläufen unterbrechen, um
ein anderes batchfile (batch2.bat) auszuführen. Sobald batch2 ausgeführt ist, soll das script
dann wieder weiterlaufen. Nach weiteren 20mal soll das ganze dann wiederholt werden...usw.
Die Batch2.bat kann auch parallel aufgerufen werden, das erste batchfile muss nicht unbedingt unterbrochen werden.
Allerdings soll Batch2 erst dann aufgerufen werden, wenn das obere Skript 20 mal durchlaufen wurde.
Habt ihr eine Idee?
Wär super
Grüße
Tom
Hab folgendes Batchfile geschrieben:
for /f "tokens=1,2 delims=/ " %%A in (datei.dat) do (App1 -u=test -p=test1 -g=ads -Jahre=%%A -Alter=%%B -Check=All -debug > %%A_%%B_Summe.txt)
Erläuterung:
Damit lasse ich diverse Einträge aus der Datei "datei.dat" auslesen und starte ein Programm App1.
So weit so gut. Ich möchte nun dieses Skript nach ca. 20 Durchläufen unterbrechen, um
ein anderes batchfile (batch2.bat) auszuführen. Sobald batch2 ausgeführt ist, soll das script
dann wieder weiterlaufen. Nach weiteren 20mal soll das ganze dann wiederholt werden...usw.
Die Batch2.bat kann auch parallel aufgerufen werden, das erste batchfile muss nicht unbedingt unterbrochen werden.
Allerdings soll Batch2 erst dann aufgerufen werden, wenn das obere Skript 20 mal durchlaufen wurde.
Habt ihr eine Idee?
Wär super
Grüße
Tom
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 87593
Url: https://administrator.de/contentid/87593
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
4 Kommentare
Neuester Kommentar
Hi,
kenn mich mit Batch-Programmierung nicht so gut aus, das Verfahren dass du beschreibst, hört sich aber nach der modulo-Operation an.
zaehler i = 0
for(;;){
i = i + 1
if ( i % 20 == 0){
starte batch2
}
}
modulo gibt den restwert zurück, also ist i % 20 = 0 erfüllt, wenn i gleich 20, 40 usw. ist
hoffe das hilft dir und du kannst modulo in batch überhaupt verwenden
kenn mich mit Batch-Programmierung nicht so gut aus, das Verfahren dass du beschreibst, hört sich aber nach der modulo-Operation an.
zaehler i = 0
for(;;){
i = i + 1
if ( i % 20 == 0){
starte batch2
}
}
modulo gibt den restwert zurück, also ist i % 20 = 0 erfüllt, wenn i gleich 20, 40 usw. ist
hoffe das hilft dir und du kannst modulo in batch überhaupt verwenden
Hallo tkline!
Ungetestet etwa so:
Grüße
bastla
Ungetestet etwa so:
@echo off & setlocal
set /a Zeile=0
for /f "tokens=1,2 delims=/ " %%A in (datei.dat) do call :ProcessLine "%%A" "%%B"
goto :eof
:ProcessLine
App1 -u=test -p=test1 -g=ads -Jahre=%~1 -Alter=%~2 -Check=All -debug > %~1_%~2_Summe.txt
set /a Zeile+=1
if %Zeile% lss 20 goto :eof
set /a Zeile=0
call batch2.bat
goto :eof
Grüße
bastla
Moin alle,
wobei mir nur als Fussnote zu sagen bleibt, dass es sinnvoll sein könnte, wenn der Batch2 mindestens einmal läuft,
auch wenn es nur insgesamt 19 Dateien sind oder eben 99.
Denn in diesen Fällen würden die letzten 19 Dateien ja nie den Genuss kommen, von Batch2 nachbehandelt zu werden.
Ich würde also vor dem ersten "goto :eof" noch eine Zeile einfügen:
[Vorteil: Dann kannst Du auch das Testen der Funktionalität mit nur 3 Testdateien oder weniger machen...]
Grüße
Biber
wobei mir nur als Fussnote zu sagen bleibt, dass es sinnvoll sein könnte, wenn der Batch2 mindestens einmal läuft,
auch wenn es nur insgesamt 19 Dateien sind oder eben 99.
Denn in diesen Fällen würden die letzten 19 Dateien ja nie den Genuss kommen, von Batch2 nachbehandelt zu werden.
Ich würde also vor dem ersten "goto :eof" noch eine Zeile einfügen:
IF %Zeile% GTR 0 call Batch2.bat
Grüße
Biber