Причиной, по которой он работал только с одним параметром, является чрезмерное использование кавычек. Поместив% * в кавычки, вы делали всю командную строку одним токеном. Кроме того, вариант / 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"

Ответы на вопрос(2)

Ваш ответ на вопрос