WinXP Batch: Zugriff auf Parameter 10, 11, ...
Robert
- programmiertechnik
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
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
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
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
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
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
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