Ralf: Batch, Variable durch Schleife mit xen erweitern

Guten Abend

ich versuche mit Batch folgendes:
set zahl=x
for %%a in (1,1,5) do set zahl=%zahl%x

Dadurch soll aus zahl=x nach Durchlaufen der Schleife zahl=xxxxxx werden. Zahl wird also 5mal durch x erweitert. Funktioniert leider nicht, die Erweiterung erfolgt nur 1mal. Was mache ich falsch?

Danke

Ralf

  1. Hi,

    set zahl=x
    for %%a in (1,1,5) do set zahl=%zahl%x

    Dadurch soll aus zahl=x nach Durchlaufen der Schleife zahl=xxxxxx werden. Zahl wird also 5mal durch x erweitert. Funktioniert leider nicht, die Erweiterung erfolgt nur 1mal. Was mache ich falsch?

    vieles. ;-)

    Zunächst mal werden die Parameter durch Space getrennt.
    Dann hast Du nur 3 Parameter, wovon einer doppelt ist, und erwartest 5 Durchläufe?

    freundliche Grüße
    Ingo

    1. Guten Tag

      set zahl=x
      for %%a in (1,1,5) do set zahl=%zahl%x

      Dadurch soll aus zahl=x nach Durchlaufen der Schleife zahl=xxxxxx werden. Zahl wird also 5mal durch x erweitert. Funktioniert leider nicht, die Erweiterung erfolgt nur 1mal. Was mache ich falsch?
      vieles. ;-)

      Zunächst mal werden die Parameter durch Space getrennt.
      Dann hast Du nur 3 Parameter, wovon einer doppelt ist, und erwartest 5 Durchläufe?

      Ja, das ist schon so richtig. Es gibt diese Art der Verwendung der for-Schleife. Der erste Parameter gibt an wo der Zähler starten soll (1), der zweite die Schrittweite (jeweils 1 hochzählen) und der dritte wo der Zähler stoppen soll. Jedenfalls funktioniert das bei:
      for %%a in (1,1,5) do net send empfaenger nachricht
      Oder ist das ein Sonderfall?

      Grüße

      Ralf

  2. Hallo,

    ich versuche mit Batch folgendes:
    set zahl=x
    for %%a in (1,1,5) do set zahl=%zahl%x
    Dadurch soll aus zahl=x nach Durchlaufen der Schleife zahl=xxxxxx werden. Zahl wird also 5mal durch x erweitert. Funktioniert leider nicht, die Erweiterung erfolgt nur 1mal. Was mache ich falsch?

    test.bat:
    _____________________________________________________________________
    echo off
    echo Eine Schleife von 1 bis 5 in Schrittweite 1:
    for /L %%a in (1,1,5) do echo %%a

    echo Das Problem ist, dass innerhalb der Schleife offensichtlich die SET-Anweisung nur einmal zusammengebaut und dann 5 mal ausgeführt wird. Siehe:
    pause
    echo on
    set zahl=x
    for /L %%a in (1,1,5) do set zahl=%zahl%x
    echo off

    pause
    echo So könnte es gehen:
    set zahl=x
    set i=1
    :start
    set /A i=%i%+1
    set zahl=%zahl%x
    if not %i%==5 goto start
    echo %zahl%
    _____________________________________________________________________

    viele Grüße

    Axel

    1. Guten Abend

      for /L %%a in (1,1,5) do set zahl=%zahl%x

      Eine Frage nebenbei: Was bewirkt /L?

      set /A i=%i%+1

      Also ist doch eine Rechnung mit Batch möglich? Ist /A die Anweisung, das folgende (i=%i%+1) als Rechnung/Addition zu behandeln?
      Danke jedenfalls für diesen Tipp, dadurch erledigt sich auch die Erweiterung einer Variablen mit mehreren xen. Das hatte nämlich selbst den Zweck, als Zähler zu fungieren.

      Grüße

      Ralf

      1. Hallo,

        for /L %%a in (1,1,5) do set zahl=%zahl%x
        Eine Frage nebenbei: Was bewirkt /L?

        /L bewirkt, dass ein Loop erfolgt. Ohne /L erwartet FOR nach dem Schlüsselwort IN in den Klammern einen Satz von Dateinamen.
        c:> help for | more
        ...
        FOR /L %Variable IN (Start,Schritt,Ende) DO Befehl [Parameter]

        Der Satz ist eine Folge von Zahlen von Start bis Ende und der
            angegebenen Schrittweite. So erzeugt (1,1,5) die Folge 1 2 3 4 5
            und (5,-1,1) erzeugt die Folge (5 4 3 2 1).
        ...

        set /A i=%i%+1
        Also ist doch eine Rechnung mit Batch möglich? Ist /A die Anweisung, das folgende (i=%i%+1) als Rechnung/Addition zu behandeln?

        Ja, seit Windows NT4.0.
        c:> help set | more
        ...
        Dem SET-Befehl wurde eine neue Option hinzugefügt:

        SET /A Ausdruck

        Die /A-Option gibt an, daß die Zeichenfolge rechts vom Gleichheitszeichen ein numerischer Ausdruck ist, der ausgewertet wird. Das Auswertungsprogramm des Ausdrucks unterstützt dabei die folgenden Vorgänge, entsprechend ihrer Anordnung mit abnehmendem Vorrang:

        ()                  - Gruppierung
            * / %               - arithmetische Operatoren
            + -                 - arithmetische Operatoren
            << >>               - logische Verschiebung
            &                   - bitweise UND
            ^                   - bitweise Exklusives ODER
            |                   - bitweise ODER
            = *= /= %= += -=    - Zuordnung
              &= ^= |= <<= >>=
            ,                   - Trennzeichen für Ausdrücke
        ...

        viele Grüße

        Axel