Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Parameterübergabe in Schleife

Frage Entwicklung Batch & Shell

Mitglied: c-az-h

c-az-h (Level 1) - Jetzt verbinden

12.01.2012, aktualisiert 10:19 Uhr, 3238 Aufrufe, 5 Kommentare

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.
01.
@echo off & setlocal 
02.
SET M=0 1 2 3 4 5 6 7 8 9 
03.
SET N=0 
04.
SET X="Liste03%i%.txt" 
05.
SET Size=10000 
06.
SET y=1 
07.
 
08.
FOR %%a IN (%M%) DO ( 
09.
 IF %%a NEQ 0 ( 
10.
  FOR %%b IN (%M%) DO ( 
11.
   FOR %%c IN (%M%) DO ( 
12.
    :weiter 
13.
    IF %%a NEQ %%b IF %%b NEQ %%c ( 
14.
     ECHO %%a%%b%%c>>%X% 
15.
16.
    FOR %%z IN (%N%) DO ( 
17.
     IF %%z EQU %%c IF %%a NEQ %%b IF %%a NEQ 0 ( 
18.
      ECHO %%a%%b%%c>>%X% 
19.
20.
21.
    FOR %%j IN (%X%) DO ( 
22.
     IF %%~zj GEQ %Size% ( 
23.
     GOTO var 
24.
25.
26.
27.
28.
29.
30.
 
31.
:var 
32.
SET /A y+=1 
33.
rem echo %y% 
34.
SET X="Liste03%y%.txt" 
35.
GOTO weiter
[Edit Biber] Codeformatierung. [/Edit]
Mitglied: pieh-ejdsch
12.01.2012 um 12:58 Uhr
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?
(for /l %i in (101 1 999) do @echo %i)|findstr /v 00 >datei.txt
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
01.
@echo off &setlocal 
02.
set /a Anfang = 101 
03.
set /a Ende = 999 
04.
 
05.
set Name=D:\Liste03 
06.
set /a Nr = 0 
07.
set Ext=.txt 
08.
 
09.
set /a Size = 10000 
10.
 
11.
:begin 
12.
set /a Nr +=1 
13.
for %i in (%Name%%Nr%%ext%) do set /a FSize=%~zi 
14.
set /a FEnde = Ende - (Size - Fsize) / 5 
15.
if %Fende% gtr %ende% set /a Fende = Ende 
16.
 
17.
(for /l %%i in (%Anfang% 1 %FEnde%) do @echo %%i)|findstr /v 00 1>>"%Name%%Nr%%ext%" 
18.
set /a Anfang = FEnde 
19.
 
20.
if %FEnde% neq %Ende% goto :begin
[edit]
Variable berichtigt
[/edit]
Gruß Phil
Bitte warten ..
Mitglied: c-az-h
12.01.2012 um 14:37 Uhr
Hallo Phil,

danke für die Antwort.
Ich habe das Skript für die Anfrage hier etwas gekürzt, da es sonst eigentlich eine Permutation über die Zahlen und das Alphabet machen soll -> was dann mehr als die 10 KB sind.
Deinen Vorschlag probiere ich mal aus.

Mal sehen wie weit ich komme, auch wenn ich das Problem mit der Sprungmarke nur als gegeben hin nehmen kann, da ich dachte, der Code wird so ausgeführt, wie er da steht, und nicht das eine Konsistenzprüfung stattfindet, ob die Schleife schon geschlossen ist.

Gruß - CA
Bitte warten ..
Mitglied: pieh-ejdsch
12.01.2012 um 14:41 Uhr
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 Datei

Die 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
Bitte warten ..
Mitglied: pieh-ejdsch
12.01.2012 um 23:38 Uhr
Den KilometerZähler könntest Du zumindest Einfacher gestalten:
01.
@echo off &setlocal 
02.
set "Index=0 1 2 3 4 5 6 7 8 9 a b c - z" 
03.
 
04.
set /a KeySize = 7 
05.
 
06.
set /a size =10000 
07.
 
08.
set /a Lines = size /( KeySize +2 ) 
09.
set /a ISize = 1 
10.
 
11.
for %%i in (%index:~2%) do set "Key=%%i" &call :begin 
12.
goto :eof 
13.
 
14.
:begin 
15.
set /a ISize +=1 
16.
for %%j in (%index%) do if %ISize% equ %KeySize% (echo(%Key%%%j) else (set "Key=%Key%%%j"&call :begin) 
17.
set /a ISize -= 1&goto :eof
Gruß Phil
Bitte warten ..
Mitglied: c-az-h
13.01.2012 um 15:40 Uhr
Hallo Phil,

danke für die Hinweise.
Habe herausgefunden, das es ein Klammerproblem zu sein scheint.
Habe es nun so gelöst, daß bei erreichen einer bestimmten Größe, eine weitere Datei aufgerufen wird, die durchzählt wieviel Textdateien da sind, und dann die vorhandene einfach umbenennt.

Markiere den Fall dann als gelöst.

Danke - CA
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

Batch & Shell
gelöst Fehler in Schleife (2)

Frage von miczar zum Thema Batch & Shell ...

Microsoft Office
Internext explorer about:blank auslesen, schleife bis gelanden (1)

Frage von thomas1972 zum Thema Microsoft Office ...

Batch & Shell
gelöst CMD: icacls in for-Schleife (2)

Frage von Lowrider614 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...