brainbug84
Goto Top

Verschachtelungen mit for schleifen

Hi zusammen,

ich habe folgendes Problem. Ich habe mehrere Textdateien (dat1,dat2,dat3,dat4). Den Inhalt von 2,3,4 möchte ich in Datei 1 schreiben, jedoch ohne die ersten 3 Zeilen (Skip=3) und ohne die letzten 7 Zeilen(habe ich durch eine for-Schleife dahingehend implementiert, dass ich mir die Anzahl der Zeilen in einer Variablen speichere und anschließend nur die Zeilen rausschreibe ohne die letzten 7. Nun habe ich noch eine forschleife deren die ich benötige um die dateien hochzuhzaehlen, das es unterschiedliche viele geben kann, also dat1-18 bspw.

Alleine funktionieren die Schleifen glaube ich, nur wenn ich es versuche zu vermischen geht gar nix mehr.

Könnt ihr mir vielleicht sagen was es mit dem @ vor den anweisungen auf sich hat also bspw.

for /f "tokens=1,* delims=:" %%i in ('findstr /n $ test.txt') do @(for /L %%a in (2,2,6) do @if %%i==%%a @echo %%j

set /a i=8   //beispielwert für anzahl der dateien

set /a zaehler2=2 //zaehler fängt bei 2 an, da ab der zweiten datei der inhalt in die erste datei soll
set /a k=%i%-2 //anzahl der schritte von 2-8 => 6

/*
*Hier wird geschaut wieviel Zeilen die jeweilige Datei hat und das k-mal(hier sechs mal). Das ergebnis soll in count gespeichert werden.
*/
for /L %%b in (1,1,%k%) do (FOR /f "tokens=1,* delims=:" %%f IN ('findstr /n . dat%zaehler2%') DO set /a count=%%f   
set /a rest=%count%-7 //Variable für ausgabe ohne letzte 7 zeilen
for /f "skip=3 tokens=1,* delims=:" %%h in ('findstr /n  . dat%zaehler2%') do @(for /L %%a in (1,1,%rest%) do @if %%h==%%a echo %%j ) >>dat1  //Hier sollen die Infos ab zeile 4 bis zur 7letzten zeile in dat1 eingefügt werden  
set /a zaehler2 = %zaehler2%+1 //Zaehler für die Dateien
)

Danke für die Hilfe, ich hoffe jemand versteht meine Ausführungen

Content-ID: 103942

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

Ausgedruckt am: 16.11.2024 um 05:11 Uhr

bastla
bastla 12.12.2008 um 22:05:31 Uhr
Goto Top
Hallo brainbug84!

Schleifen lassen sich auch anders konstruieren:
@echo off & setlocal
set /a Anzahl=8
set /a zaehler2=2

:Loop
FOR /f "tokens=1,* delims=:" %%f IN ('findstr /n "^" "dat%zaehler2%"') DO set /a count=%%f   
set /a bis=%count%-7
for /f "skip=3 tokens=1,* delims=:" %%i in ('findstr /n "^" "dat%zaehler2%"') do if %%i leq %bis% >>"dat1" echo %%j  
set /a zaehler2+=1
if %zaehler2% leq %Anzahl% goto :Loop
Kommentare werden übrigens in Batch entweder mit REM oder mit :: eingeleitet - sollen sie auch noch an eine Codezeile angefügt werden, dann etwa so:
echo Das wird ausgegeben & REM und das nicht
Könnt ihr mir vielleicht sagen was es mit dem @ vor den anweisungen auf sich hat
Wenn Du kein "echo off" setzt, werden Befehle vor der Ausführung zunächst einmal angezeigt. Mit dem vorangestellen "@" kannst Du diese Anzeige gezielt für einzelne Befehle unterdrücken, also etwa
for /L %i in (1,1,5) do echo Zeile %i mit Vorab-Anzeige
vs
for /L %i in (1,1,5) do @echo Zeile %i ohne Vorab-Anzeige
Beide Beispiele sind (wie am einfachen "%" für die Laufvariable zu erkennen) für die Direkteingabe an der Kommandozeile gedacht.

Grüße
bastla