multimania
Goto Top

for Schleife vorzeitig beenden?

[Edit] Beitrag nach wochenlanger Stagnation geschlossen 13.11.2006 [/Edit Biber]

Hallo,

iich habe eine for Schleife die für jede Zeile in einer Datei einen Befehl ausführt.
Nun möchte ich aber gerne das nur die ersten 4 Zeilen verwendet werden bzw. die Schleife nach der 4. Zeile geschlossen wird.

for /f %%a IN (test.txt) DO (
befehl %%a
)

kann mir jemand helfen?

Danke.

Content-Key: 42879

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

Printed on: April 18, 2024 at 21:04 o'clock

Member: Biber
Biber Oct 24, 2006 at 09:26:32 (UTC)
Goto Top
Moin Multimania,

eine der Möglichkeiten wäre so.
::-ExitLoopDemo.bat
@echo off & setlocal & set /a "Ln=1000"  
for /f "delims=" %%a IN (test.txt) DO call:Do4Times %%a  
:Do4Times [Parameter1: eine Zeile aus Datei
set /a Ln+=1
if %Ln% GTR 1004 goto ExitLoop
Echo [%ln:~-3%] %*
goto :eof
:exitloop
:: ...ggf ...weitere Befehle
:: ....

Gruß
Biber
Member: Multimania
Multimania Oct 24, 2006 at 10:45:53 (UTC)
Goto Top
Hallo,

danke für die schnelle Antwort, ich habe es probiert aber ich habe scheinbar vergessen zu sagen das die for Schleife bereits in einer for Schleife steckt und das dann mit der Sprungmarke nicht funktioniert.

hier etwas mehr Quelltext.

for /f %%a IN (a.txt) DO (
for /f %%b IN (b.txt) DO (
befehl %%a %%b
)
)


Danke.
Member: Biber
Biber Oct 24, 2006 at 11:15:41 (UTC)
Goto Top
Na ja, Multimania,

dann würde ich die Strategie davon abhängig machen, ob in der Datei b.txt die ersten 4 von Zeilen oder die ersten 4 von 100000 Zeilen gelesen sollen.

Im ersten Fall (4 vom 10 Zeilen) würde die Sprungmarke dann schlicht "goto :eof", also verlasse den CALL-Block lauten. Oder aber in der äußeren Schleife die innere FOR-Anweisung nur aufrufen, wenn %Ln% kleiner 4.

Im zweiten Fall (nur die ersten 4 Zeilen eines riesigen Logfiles) würde ich entweder per Batch erstmal die ersten 4 Zeilen in eine Datei %temp%\c.txt kopieren und mit dieser weiterarbeiten.

Oder (dieselbe Mimik, aber professioneller) die ersten vier Zeilen mit einem head.exe/header.exe-Utility oder halt einem VBS-Schnipsel extrahieren.

Gruß
Biber
Member: Multimania
Multimania Oct 24, 2006 at 11:21:34 (UTC)
Goto Top
deinem ersten Fall kann ich leider nicht fogen

Fall 2 verstehe ich, bin noch auf der suche ...
Member: Biber
Biber Oct 24, 2006 at 11:38:28 (UTC)
Goto Top
::--------Fall A nochmal im ganzen Satz....
@echo off & setlocal & set /a "Ln=1000"  
for /f "delims=" %%a IN (a.txt) DO (  
   for /f "delims=" %%b IN (b.txt) DO call:Do4Times "%%a" "%%b"  
)

:Do4Times [Parameter1: eine Zeile aus Datei
set /a Ln+=1
if %Ln% GTR 1004 (
     set /a "ln=1000"  & goto :eof  
)
Echo oder Befehl [%ln:~-3%] "%~1" "%~2"  
REM Parameter 1 enthält %%a, also Zeile aus Datei a.txt; 
REM Parameter 2 enthälz %%b, also eine Zeile aus b.txt
goto :eof

Gruß
Biber