Robert: WinXP Batch: Zugriff auf Parameter 10, 11, ...

Hallöle,

in einem Batchfile unter WinXP Command Fenster will ich auf die Parameter zugreifen, die beim Aufruf des Batchfiles angegeben wurden.

Das ist ja an sich kein Problem, per %1 bekomme ich den ersten Parameter, per %2 den zweiten usw. bis zu %9 für den neunten Parameter.

Den zehnten Parameter bekomme ich aber nicht mit %10 (da bekomme ich den ersten Parameter, mit einer 0 hinten dran.

Ich weiß auch, daß ich mit shift arbeiten kann, um den zehnten Parameter dann per %9 zu erwischen, nach nochmaligem shift den elften Parameter per %9 usw.

Gibt es eine Methode, um auf die Parameter 10 oder höher direkt zuzugreifen, ohne shift?

Danke,
Der zum Batch-Programmieren gezwungene Robert

  1. Hallo Robert,

    Gibt es eine Methode, um auf die Parameter 10 oder höher direkt zuzugreifen, ohne shift?

    Laut XP-Hilfe zu "Verwenden von Batchparametern": Nein

    Freundliche Grüße

    Vinzenz

  2. gudn tach!

    Gibt es eine Methode, um auf die Parameter 10 oder höher direkt zuzugreifen, ohne shift?

    in dem parameter %* stehen alle parameter zusammen hintereinanderdrin. durch die string-funktion, die microsoft mitliefert (help set, help for) kann man evtl. daraus die gesuchten parameter extrahieren, ohne shift zu verwenden. aber warum willst du shift nicht verwenden? iow: beschreibe mal dein problem genauer (d.h. mit mehr kontext).

    prost
    seth

    1. gudn tach!

      es geht noch einfacher, naemlich ueber ein pseudo-array:

      im folgenden code wird ein array testscript_param_ mit den parametern befuellt, also testscript_param_0, testscript_param_1, ... testscript_param_[latex]n[/latex].

      set testscript_counter=-1
        setlocal enabledelayedexpansion
        :anfang
        if "%1"=="" goto ende
          set /a testscript_counter=testscript_counter+1
          set testscript_param_%testscript_counter%=%1
          shift
        goto anfang
        :ende
        for /l %%i in (0,1,%testscript_counter%) do echo !testscript_param_%%i!

      prost
      seth

      1. gudn tach!

        ui, ui, ui, gegen mich verblassen ingrid und Gunnar.
        mir ist noch was eingefallen...
        kleine korrektur im code:
        "%~1" statt "%1", damit auch sowas wie
          a b c " d oo f " e
        als 5 parameter akzeptiert wird.

        set testscript_counter=-1
          setlocal enabledelayedexpansion
          :anfang
          if "%~1"=="" goto ende
            set /a testscript_counter=testscript_counter+1
            set testscript_param_%testscript_counter%=%1
            shift
          goto anfang
          :ende
          for /l %%i in (0,1,%testscript_counter%) do echo !testscript_param_%%i!

        prost
        seth

    2. Hallöle,

      Gibt es eine Methode, um auf die Parameter 10 oder höher direkt zuzugreifen, ohne shift?

      in dem parameter %* stehen alle parameter zusammen hintereinanderdrin.

      Hilft mir nicht wirklich.

      aber warum willst du shift nicht verwenden?

      ich find es halt einfach unschön, daß ich auf die weiteren Parameter anderes zugreifen muß als auf die ersten 9.

      Unter anderem auch deswegen, weil ich dann die Parameter erst wieder in anderen Variablen speichern muß, denn nach dem ersten Shift ist der ursprüngliche Inhalt von %1 ja weg ...

      Ich hab dann am Anfang des Scripts erstmal eine lange Liste:

      set param1=%1
      set param2=%2
      set param3=%3
      set param4=%4
      set param5=%5
      set param6=%6
      set param7=%7
      set param8=%8
      set param9=%9
      shift
      set param10=%9
      shift
      set param11=%9
      shift
      set param12=%9
      rem usw.

      und muß alle Stellen, an denen die Parameter benutzt werden, abändern von %1 auf %param1% usw.

      Das finde ich nicht wirklich schön.

      Robert

      1. gudn tach!

        in dem parameter %* stehen alle parameter zusammen hintereinanderdrin.

        Hilft mir nicht wirklich.

        naja, es ginge afais schon, aber waere recht kompliziert.

        Unter anderem auch deswegen, weil ich dann die Parameter erst wieder in anderen Variablen speichern muß, denn nach dem ersten Shift ist der ursprüngliche Inhalt von %1 ja weg ...

        das speichern in einer neuen variable ist ja nix schlimmes, oder?

        Ich hab dann am Anfang des Scripts erstmal eine lange Liste: [...]

        dafuer habe ich ja bereits ein script angegeben.

        prost
        seth