Parameterübergabe in Schleife
Braeuchte Hilfe, da anscheinend meinerseits ein Verstaendnissproblem bei der Parameterübergabe besteht.
Folgend der Quelltext meines kleinen Programms, welches eine 3er Zahlenkombination ausführen soll (unterschiedliche), jedoch nicht, wenn die Führende eine 0 ist, und nur die Null zwei mal in Folge auftreten darf.
Dies wird in eine Datei geschrieben, und nun sollte, wenn die Dateigröße größer 10 KB wird, eine Neue Datei angelegt werden. Es wird aber sofort, wenn die 10 KB der ersten Datei erreicht sind, für jeden folgenden Eintrag eine Datei erstellt, was mich vermuten läßt das immerwieder nur nach der ersten Datei geschaut wird.
[Edit Biber] Codeformatierung. [/Edit]
Folgend der Quelltext meines kleinen Programms, welches eine 3er Zahlenkombination ausführen soll (unterschiedliche), jedoch nicht, wenn die Führende eine 0 ist, und nur die Null zwei mal in Folge auftreten darf.
Dies wird in eine Datei geschrieben, und nun sollte, wenn die Dateigröße größer 10 KB wird, eine Neue Datei angelegt werden. Es wird aber sofort, wenn die 10 KB der ersten Datei erreicht sind, für jeden folgenden Eintrag eine Datei erstellt, was mich vermuten läßt das immerwieder nur nach der ersten Datei geschaut wird.
@echo off & setlocal
SET M=0 1 2 3 4 5 6 7 8 9
SET N=0
SET X="Liste03%i%.txt"
SET Size=10000
SET y=1
FOR %%a IN (%M%) DO (
IF %%a NEQ 0 (
FOR %%b IN (%M%) DO (
FOR %%c IN (%M%) DO (
:weiter
IF %%a NEQ %%b IF %%b NEQ %%c (
ECHO %%a%%b%%c>>%X%
)
FOR %%z IN (%N%) DO (
IF %%z EQU %%c IF %%a NEQ %%b IF %%a NEQ 0 (
ECHO %%a%%b%%c>>%X%
)
)
FOR %%j IN (%X%) DO (
IF %%~zj GEQ %Size% (
GOTO var
)
)
)
)
)
)
:var
SET /A y+=1
rem echo %y%
SET X="Liste03%y%.txt"
GOTO weiter
[Edit Biber] Codeformatierung. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178792
Url: https://administrator.de/forum/parameteruebergabe-in-schleife-178792.html
Ausgedruckt am: 22.04.2025 um 21:04 Uhr
5 Kommentare
Neuester Kommentar
moin c-az-h,
wir Begrüßen uns meist.
Du schreibst doch aber pro Zeile nur 5 Byte wieso kommst Du bei 890 (891) Zeilen auf über 10 kB?
Existieren die Liste*.txt schon?
Der Sprung aus der Forschleife wird zwar gemacht, aber der Sprung hinein geht nicht mehr, und die Klammern stimmem nicht mehr.
Die Marke :Weiter befindet sich zu diesem Hingang nicht mehr in einer Schleife.
Danach wird der Rest der Schleife ganz normal ausgeführ und die Datei wird mit dem Rest Vollgeschrieben.
Vieleicht ist es Besser die Größe der Ausgabedatei vorher zu bestimmen und von der Endgröße diesen Wert abzuziehen Durch 5 zu teilen und dieses Ergebnis anstatt dem Endwert in der For /L Schleife einzufügen.
Ungetestet
[edit]
Variable berichtigt
[/edit]
Gruß Phil
wir Begrüßen uns meist.
Du schreibst doch aber pro Zeile nur 5 Byte wieso kommst Du bei 890 (891) Zeilen auf über 10 kB?
(for /l %i in (101 1 999) do @echo %i)|findstr /v 00 >datei.txt
Der Sprung aus der Forschleife wird zwar gemacht, aber der Sprung hinein geht nicht mehr, und die Klammern stimmem nicht mehr.
Die Marke :Weiter befindet sich zu diesem Hingang nicht mehr in einer Schleife.
Danach wird der Rest der Schleife ganz normal ausgeführ und die Datei wird mit dem Rest Vollgeschrieben.
Vieleicht ist es Besser die Größe der Ausgabedatei vorher zu bestimmen und von der Endgröße diesen Wert abzuziehen Durch 5 zu teilen und dieses Ergebnis anstatt dem Endwert in der For /L Schleife einzufügen.
Ungetestet
@echo off &setlocal
set /a Anfang = 101
set /a Ende = 999
set Name=D:\Liste03
set /a Nr = 0
set Ext=.txt
set /a Size = 10000
:begin
set /a Nr +=1
for %i in (%Name%%Nr%%ext%) do set /a FSize=%~zi
set /a FEnde = Ende - (Size - Fsize) / 5
if %Fende% gtr %ende% set /a Fende = Ende
(for /l %%i in (%Anfang% 1 %FEnde%) do @echo %%i)|findstr /v 00 1>>"%Name%%Nr%%ext%"
set /a Anfang = FEnde
if %FEnde% neq %Ende% goto :begin
Variable berichtigt
[/edit]
Gruß Phil
verstehe nur nicht, warum Du die Variable "Beginn" setzt
Schusselfehler! sollte Anfang heisen.Die Schleife bleibt ja so wie sie ist und wird bis zum Schluss durchgezogen (wenn ein goto :eof in Zeile 30 wäre).
So bleibt Die Schleife offen genau an der Zahl, welche zuletzt geschrieben wurde.
Der Denkfehler liegt im Goto :SprungMarke in der Schleife.
Das GOTO macht was es soll - es wird jede nachfolgende Zeile des Batches nach der :SprungMarke durchsucht.
Wird diese nicht gefunden wird von vorne neu Angefangen mit suchen dieser Marke.
In Zeile 12 Deines Batches ist die Marke und danach wird normal verglichen
if %a NEQ %b usw...
doppelte Prozente werden zu einem und %a%b%c steht in jeder neuen DateiDie Schließende Klammer macht als Befehl aber keine Fehlermeldung oder anderes.
Dann kommt der Vergleich der Größe der neuen Datei (die Variablen werden ja normal Aufgelöst) und weil das goto :eof in Zeile 30 Fehlt kommt der Batch irgendwann wo an ?
:var
wäre goto :eof da würde der Rest der Forschleife ausgeführt werden aber trotzdem den Rest der Zahlen in die 1. Datei schreiben, weil in der Schleife die Variable X noch die vom Anfang ist.und da geht der Kreis wieder von vorn los.
Gruß Phil
Den KilometerZähler könntest Du zumindest Einfacher gestalten:
Gruß Phil
@echo off &setlocal
set "Index=0 1 2 3 4 5 6 7 8 9 a b c - z"
set /a KeySize = 7
set /a size =10000
set /a Lines = size /( KeySize +2 )
set /a ISize = 1
for %%i in (%index:~2%) do set "Key=%%i" &call :begin
goto :eof
:begin
set /a ISize +=1
for %%j in (%index%) do if %ISize% equ %KeySize% (echo(%Key%%%j) else (set "Key=%Key%%%j"&call :begin)
set /a ISize -= 1&goto :eof
Gruß Phil