Причиной, по которой он работал только с одним параметром, является чрезмерное использование кавычек. Поместив% * в кавычки, вы делали всю командную строку одним токеном. Кроме того, вариант / F FOR не то, что вы искали. Документация доступна из FOR /? должно помочь прояснить ситуацию.
аюсь перебрать аргументы, которые я передаю в командный файл. Основываясь на аргументе, я хочу установить флаг переменной true или false для использования позже в скрипте
Так что моя команда "myscript.bat / u / p / s"
И мой код:
FOR /f %%a IN ("%*") DO (
IF /I "%%a"=="/u" SET UPDATE=Y
IF /I "%%a"=="/p" SET PRIMARY=Y
IF /I "%%a"=="/s" SET SECONDARY=Y
)
Это работает, только если у меня есть один аргумент, который говорит мне, что он получает весь список аргументов в качестве одного аргумента. Я пробовал "delims =", но безрезультатно. Есть мысли о том, чтобы получить каждый аргумент?
Как насчет добавления значения к одному из параметров?
myscript.bat / u / p / d TEST / s
:loop
IF "%~1"=="" GOTO cont
IF /I "%~1"=="/u" SET UPDATE=Y
IF /I "%~1"=="/p" SET PRIMARY=Y
IF /I "%~1"=="/s" SET SECONDARY=Y
IF /I "%~1"=="/d" SHIFT & SET DISTRO="%~1"
SHIFT & GOTO loop
:cont
Но SHIFT, который идет в линию с последним IF, на самом деле ничего не меняет. DISTRO в конечном итоге становится "/ d" вместо "TEST"