Eine robuste Methode ist, verzögerten Expansion
setlocal enableDelayedExpansion
set "validArgs=;arg1;arg2;arg3;"
if "!validArgs:;%~1;=!" neq "!validArgs!" set ARG=%1
nennt es auch getan werden kann, verwenden Verwendung zusammen mit normaler Expansion, aber es ist wahrscheinlicher, zum Scheitern verurteilt, je nach dem Wert des Parameters.
set "validArgs=;arg1;arg2;arg3;"
call set "test=%%validArgs:;%~1;=%%"
if "%test%" neq "%validArgs%" set ARG=%1
Beide Techniken haben oben eine Einschränkung, dass keine gültige arg =
und args darf nicht anspringen, mit *
enthalten.
Sie könnten auch die folgenden Brute-Force-Methode verwenden, solange keine der gültigen Argumente enthalten *
?
,
;
=
oder <space>
set "validArgs=arg1;arg2;arg3"
for %%A in (%validArgs%) if /i "%~1"=="%%A" set ARG=%1
Sie können einen Blick auf diese argument parser haben wollen. Sie könnten diesen Code anpassen oder Ideen für Ihre eigene Strategie entwickeln.
Das ist großartig, danke. Ich wünschte, es gäbe einen präziseren Weg, Arrays zu erstellen, aber das wird perfekt funktionieren. – justinhj
@justinhj - Sie müssen vorsichtiger sein, wenn Sie jemand anderen bearbeiten. Sie haben tatsächlich einen Fehler eingeführt. Es funktioniert so, wie es ursprünglich mit 'for/L %% i in (1,1,3)' oder als 'for %% i in (1,2,3)' geschrieben wurde. Aber Ihre Bearbeitung von 'für/L %% i in (1,2,3)' wird nicht die richtige Antwort geben. Ich habe die Antwort darauf geändert, wie Aacini es ursprünglich hatte. – dbenham
Ihre zweite Option muss den Fall behandeln, in dem% 1 nicht angegeben ist. Das Hinzufügen eines Dummy-Präfixes zu jedem Argumentnamen würde dies auflösen. – Kevin