Понимая, что это немного старый вопрос, ответы помогли мне найти решение для тестирования аргументов командной строки в командном файле;поэтому я также хотел опубликовать свое решение на тот случай, если кто-то еще ищет подобное решение.
Первое, на что я должен обратить внимание, это то, что у меня возникли проблемы с получением операторов IF ... ELSE для работы внутрипредложение FOR ... DO.Оказывается (спасибо dbenham за непреднамеренное указание на это в его примерах), оператор ELSE не может находиться на отдельной строке от закрывающих скобок.
Так что вместо этого:
FOR ... DO (
IF ... (
)
ELSE (
)
)
, Которыйя предпочитаю удобочитаемость и эстетические соображения, вы должны сделать это:
FOR ... DO (
IF ... (
) ELSE (
)
)
Теперь оператор ELSE не возвращается как нераспознанная команда.
Наконец, вот что я пыталсячтобы сделать - я хотел иметь возможность передавать несколько аргументов в пакетный файл в любом порядке, игнорируя регистр и сообщая / отказывая по неопределенным аргументам, переданным внутрь. Так вот мое решение ...
@ECHO OFF
SET ARG1=FALSE
SET ARG2=FALSE
SET ARG3=FALSE
SET ARG4=FALSE
SET ARGS=(arg1 Arg1 ARG1 arg2 Arg2 ARG2 arg3 Arg3 ARG3)
SET ARG=
FOR %%A IN (%*) DO (
SET TRUE=
FOR %%B in %ARGS% DO (
IF [%%A] == [%%B] SET TRUE=1
)
IF DEFINED TRUE (
SET %%A=TRUE
) ELSE (
SET ARG=%%A
GOTO UNDEFINED
)
)
ECHO %ARG1%
ECHO %ARG2%
ECHO %ARG3%
ECHO %ARG4%
GOTO END
:UNDEFINED
ECHO "%ARG%" is not an acceptable argument.
GOTO END
:END
Примечание, это будет сообщать только о первом неудачном аргументе.Поэтому, если пользователь передает более одного неприемлемого аргумента, ему сообщается только о первом, пока он не будет исправлен, затем о втором и т. Д.