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
Danke für die Hilfe, ich hoffe jemand versteht meine Ausführungen
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 103942
Url: https://administrator.de/contentid/103942
Ausgedruckt am: 16.11.2024 um 05:11 Uhr
1 Kommentar
Hallo brainbug84!
Schleifen lassen sich auch anders konstruieren:
Kommentare werden übrigens in Batch entweder mit REM oder mit :: eingeleitet - sollen sie auch noch an eine Codezeile angefügt werden, dann etwa so:
vs
Beide Beispiele sind (wie am einfachen "%" für die Laufvariable zu erkennen) für die Direkteingabe an der Kommandozeile gedacht.
Grüße
bastla
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
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 etwafor /L %i in (1,1,5) do echo Zeile %i mit Vorab-Anzeige
for /L %i in (1,1,5) do @echo Zeile %i ohne Vorab-Anzeige
Grüße
bastla