majcho
Goto Top

For Schleife nach der X. Ausführung einen anderen Befehl aufrufen

Hallo,

würde gerne eine Schleife 80 mal ausführen, bis dann ein ein weiterer Befehl erfolgt. Kann mir jemand eine Lösung sagen?

Hier mein Versuch, der allerdings nicht nach dem 80. Aufruf die Funktion batch2.bat sondern alle Dateien ausführt und dann die Schleife endlos wiederholt.

set numb=1

:start
FOR /F "tokens=1,2" %%i in ('type dateien.txt') do (  
if %numb%==80 goto batch2
set /a numb +=1
IF NOT EXIST %%i curl -o %%i %%j )

:batch2
call batch2.bat
goto start

Content-ID: 178597

Url: https://administrator.de/contentid/178597

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

Skyemugen
Skyemugen 09.01.2012 um 15:11:17 Uhr
Goto Top
Aloha,

hmm soso er führt also kein goto aus einer Schleife heraus aus? Ja, sowas ... eventuell mal in unserem Tutorial zur FOR-Schleife vorbeischauen, die dir dann auch erklärt, dass das auch nicht realisierbar ist.

Ich würde wenn dann eher zu
if %numb%==80 call batch2.bat && goto :eof tendieren aber du willst wohl danach nochmal 80 Durchgänge oder wie oder was? face-wink du kannst natürlich auch deine Hauptschleife in eine for /L %%s in (1,1,80) legen, jeder wie er's mag.

greetz André
Pjordorf
Pjordorf 09.01.2012 um 15:12:09 Uhr
Goto Top
Hallo,

Zitat von @majcho:
.
.
.
> :batch2
> call batch2.bat
> goto start
> 
Warum ist dort ein goto start drin?

Gruß,
Peter
majcho
majcho 09.01.2012 um 15:28:51 Uhr
Goto Top
Das ist die Lösung

for /L %%s in (1,1,80)

Danke!!!
icsat
icsat 09.01.2012 um 15:47:17 Uhr
Goto Top
Zitat von @majcho:
Hier mein Versuch, der allerdings nicht nach dem 80. Aufruf die Funktion batch2.bat sondern alle Dateien ausführt und dann
die Schleife endlos wiederholt.

Hallo majcho,

hast Du Dir die Ausgabe Deines Codes mal angesehen?

Warum endet die Schleife nicht nach Versuch 80?
Das Problem ist imho nicht das der goto in der For-Schleife nicht funktioniert, sondern dass Du immer "1" mit "80" vergleichst, da auf die Variable "numb" erst nach Beendigung der For-Schleife mit neuem Inhalt zugegriffen werden kann. Du kannst das umgehen, in dem Du "SETLOCAL EnableDelayedExpansion" verwendest und die Variable in der For-Schleife mit "!numb!" ansprichst. Details dazu stehen bestimmt in einem der guten Batch Tutorials.

Aber ich gebe Skyemugen recht, dass ich hier auch kein goto verwenden würde.

Warum wird die Schleife endlos wiederholt?
goto start


Gruß icsAT
majcho
majcho 09.01.2012 um 15:53:52 Uhr
Goto Top
@ skymugen & icsat

Danke für die Infos. Bin Frischling und daher noch nicht so weit um mit Rookis mitzuhalten. Deshalb meine Frage. Das mit der For /L %%s in (1,1,80) hilft mir schon weiter die Schleife zu verstehen. Habe das ausprobiert. Leider keine Ahnung wie ich aus der 80. Umrundung wieder rauskomme, die dateien.txt umfasst 2400 Dateien, nach jeder 80. Ausführung soll batch2.bat aufgerufen werden.

for /L %%s in (1,1,80) do (
call batch2.bat
FOR /F "tokens=1,2" %%i in ('type dateien.txt') do (  
IF NOT EXIST %%i curl -o %%i %%j 
)
)
icsat
icsat 09.01.2012 um 16:34:59 Uhr
Goto Top
Nun verarbeitest Du die Datei "dateien.txt" 80 mal und zwar vollständig ;-( Vor jedem vollständigen Verarbeiten wird batch2 aufgerufen.

Da es nun eine neue Anforderung gibt:
Zitat von @majcho:
die dateien.txt umfasst 2400 Dateien, nach jeder 80. Ausführung soll batch2.bat aufgerufen
werden.
Das "...nach jeder..." war bisher bei mir nicht angekommen, daher würde ich Deinen Ursprungsansatz weiter verfolgen:
SETLOCAL EnableDelayedExpansion
set numb=0

FOR /F "tokens=1,2" %%i in (dateien.txt) do (  
   set /a numb +=1
   if "!numb!"=="80" (  
      set numb=0
      call batch2.bat
   )
   if not exist %%i curl -o %%i %%j
)

ENDLOCAL

goto :eof

Gruß icsAT