1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

batch loop mit counter und goto zählt nicht richtig

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von ngedigk, 26. August 2013.

  1. ngedigk

    ngedigk Grünschnabel

    Hallo zusammen,

    ich bitte um eure Mithilfe für folgenden Code:
    Code (Text):
    1. @echo off
    2.  
    3.     :nochmal
    4.         cls
    5.         echo.|set /p ="Schleifen-Durchläufe: "
    6.         set /p maxschleife=""
    7.         set /a counter=1
    8.  
    9.     :start
    10.         echo counter: %counter%
    11.         set /a counter+=1
    12.         if %counter% lss %maxschleife%+1 goto start
    13.  
    14.     echo.|set /p ="Nochmal [j/n]: "
    15.     set /p nochmal=""
    16.     if "%nochmal%"=="j" goto :nochmal
    17.     if "%nochmal%"=="n" goto :eof
    18.    
    19. pause
    Das man solche Schleifen auch mit einer for-Schleife machen kann ist mir klar. Aber in einem bestimmten Fall brauche ich solche Sprungmarken. Ich bin etwas raus, weil ich ewig nicht mit bat-Dateien gearbeitet habe.

    Testet den Code mal bitte aus.
    Wenn ich für %maxschleife% 1,2,3,4,5,6,7,8 eingebe geht noch alles klar.

    Wenn ich 9 eingebe, zählt es bis 89
    Bei 10-19 zählt es nur bis 1
    Bei 20-29 zählt es bis 2 etc.
    Bei 99 zählt es bis 989


    Was ist da los? :(
     
    Zuletzt bearbeitet: 26. August 2013
  2. deepthroat

    deepthroat Erfahrenes Mitglied

    Hi.

    Was da genau vor sich geht, siehst du ganz einfach indem du echo of ON stellst. :eek:

    Bei der Operation LSS wird ein Stringvergleich durchgeführt, und es wird auch nicht der Wert von %maxschleife%+1 berechnet, sondern mit "N+1" als String verglichen.

    Bei 1,2,3,4,5,6,7,8 funktioniert das noch gut, da du nur eine Dezimalstelle hast, bei maxschleife = 9, werden aber zwei Dezimalstellen verglichen, also z.B. ob 10 LSS 9+1 ist -- als String! Da die 1 < 9 ist, ist der Test bereits wahr.

    Erst beim Vergleich 90 LSS 9+1 wird die Schleife gestoppt, da 9 nicht kleiner 9 ist, und 0 größer als + ist (laut ASCII Tabelle).

    Wäre jetzt die Frage warum du überhaupt Sprungmarken verwenden willst, vermutlich geht es einfach mit einer Zählschleife.
     
  3. ngedigk

    ngedigk Grünschnabel

    Danke für diese ausführliche und gut verständliche Erklärung! :D

    Mir leuchtet folgendes trotzdem nicht ein:
    Warum wird da ein Stringvergleich gemacht. Ich wollte gern einen Numerischen Vergleich ... :rolleyes:
    Muss ich also offensichtlich eine andere IF Bedingung finden, die das kontrolliert.

    Warum ich keine Zählschleife verwende:
    Klar ist sicher, dass das da oben nur ein Beispiel ist.
    Soweit mein Kenntnisstand reicht, kann ich die Variablen die innerhalb der for-Schleife verwendet werden, nicht mehr außerhalb derselben verwenden, war das nicht so? Ich würde aber sogar mehrere for-Schleifen miteinander schachteln müssen.

    Kurze Erklärung zum Anwendungsgebiet:
    • Es sollen schlussendlich mehrere txt-Dateien, mit variablen Inhalten erzeugt werden.
    • Dafür werden diverse Benutzerabfragen zu folgendem gemacht.
    • Es existiert ein Satz mit variabler Anzahl von PDF-Dateien (Linien genannt). Die Anzahl der Linien, wie auch folgende Details werden vom Benutzer eingegeben.
    • Für Jede Linie wird ein Name vergeben.
    • Jede Linie hat unterschiedliche Seitenzahlen.
    • Davon sind einige Seiten Doppelseiten (1 Blatt = 2 Seiten); andere Seiten sind einseitig.
    • Es werden noch viele weitere Dinge zu jeder einzelnen PDF des gesamten Satzes abgefragt.
    • Es werden auch nicht nur numerische Eingaben verarbeitet. Auch Strings werden erfasst. So zum Beispiel ob ein Text an einer bestimmten Stelle aller Seiten aller PDF weiß oder schwarz dargestellt ist.
    • Egal was es noch für Abfragen geben mag, alle erfassten Variablen sollen in einer Sammel-txt-Datei erfasst werden.
    • Anschließend sollen aus dieser Sammel-txt-Datei nach bestimmten Kriterien diverse einzel-txt-Datei erstellt werden, indem diese Variablen ausgelesen werden.
     
    Zuletzt bearbeitet: 27. August 2013
  4. deepthroat

    deepthroat Erfahrenes Mitglied

    Weil das so definiert ist (siehe "help if")
    Das ist nicht verhandelbar. ;)
    Ich weiß nicht genau was du meinst, aber mir fallen da keine besonderen Beschränkungen ein.
    Das ist OK.
    Klingt auf jeden Fall so, als würdest du mit Zählschleifen und "Subroutinen" besser fahren als mit wildem Herumgespringe.
     
  5. ngedigk

    ngedigk Grünschnabel

    okay, dann mach ich mich mal ran und geh das mal so wie du es sagst durch ...

    Danke dir für deine Antworten bis hierher.

    Was wäre zu meiner Annahme hier zu sagen?
     
  6. deepthroat

    deepthroat Erfahrenes Mitglied

    Wie gesagt, ich weiß nicht genau was du da meinst. Evtl. das eine Schleifenvariable immer nur aus einem Buchstaben besteht und dementsprechend max. 26 Schleifen geschachtelt werden könnnen, aber wer will das schon... Andere Variablen kann man problemlos in inneren und äußeren Schleifen verwenden.
     
  7. ngedigk

    ngedigk Grünschnabel

    Okay, seltsam, ich war der Meinung das gelesen zu haben und war auch der Überzeugung, dass ich damit tatsächlich auch Probleme hatte und deshalb zu Sprungmarken gewechselt war.

    Soviele verschachtelungen brauche ich nun auch wieder nicht. ;)

    Also gut, wie schon gesagt werde ich das ganze einfach neu aufrollen.
     
Die Seite wird geladen...