Что является эквивалентом переменных оболочки $@ в командах Windows?

Что является эквивалентом переменных оболочки $@ в командах Windows?

Я хочу поместить переменную в мой командный пакетный скрипт для нескольких аргументов, так как число может меняться. Так же, как в оболочке мы используем $@. Я пробовал несколько вещей, но ничего не работает.

[Правка: я знаю, что %* работает, но на самом деле нужно было использовать оператор SHIFT, чтобы удалить первый аргумент и присвоить оставшуюся часть переменной. Но когда я делаю SHIFT и проверяю %*, он все равно показывает весь исходный аргумент, в отличие от оболочки unix.]

В настоящее время я использую для этого цикл FOR, но хотел бы узнать, есть ли какая-либо другая команда/метод, чтобы извлечь первый аргумент и присвоить остальные другой переменной.

например: SomeCommand "несколько аргументов"

решение1

%*в пакетном файле хранятся все аргументы, переданные скрипту (за исключением имени самого скрипта), точно так, как они были написаны.

Вы также можете найти их полезными:

%0- команда, используемая для вызова пакетного файла (может быть foo, ..\foo, c:\bats\foo.batи т.д.)
%1- первый параметр командной строки,
%2- второй параметр командной строки
и так далее до %9СДВИГ можно использовать для тех, кто после 9-го числа).

Видеть Как передать аргументы командной строки (параметры) в пакетный файл Windows.

Пример использования SHIFTследующей команды:

batchfile.bat The Quick Brown
  • Как дано: %0=Быстрый Коричневый, %1= %2Быстрый, %3=Коричневый.
  • После SHIFT: %0=Быстро-коричневый, %1=Быстрый, %2=Коричневый
  • После второго СДВИГА: %0=Быстрый Коричневый, %1=Коричневый

На вопрос "все, кроме первого параметра" нет хорошего ответа. Пакетный язык недостаточно точен для метода, который работает для всех возможных параметров, поэтому использование SHIFT является лучшим методом.

Обсуждение возможных решений можно найти в посте
Есть ли способ указать последние n параметров в пакетном файле?

Связанный контент