Как передать несколько параметров в пакетном режиме?

В моем пакетном файле я хочу передать несколько параметров в другое приложение.

Теперь я это делаю

app.exe %1 %2

и он может передавать только два параметра, но я хочу передать все параметры, которые передаются в пакет (я предпочел бы не писать% 1% 2% 3% 4...)

Есть ли волшебный способ сделать это?

Ответы

Ответ 1

Есть волшебный путь! Я знал это, но я не мог этого запомнить.

его %*

Ответ 2

Вы можете использовать команду SHIFT и прокрутить аргументы. Вот демонстративный пример, в котором вы бы заменили окончательное приглашение ECHO приглашением загрузить ваше приложение.

@ECHO OFF

SET PARAMS=

:_PARAMS_LOOP

REM There is a trailing space in the next line; it is there for formatting.
SET PARAMS=%PARAMS%%1 
ECHO %1
SHIFT

IF NOT "%1"=="" GOTO _PARAMS_LOOP

ECHO %PARAMS%

PAUSE

Это может быть полезно, если вам нужен какой-то динамический подсчет параметров или если вы хотите запретить определенный параметр.

Ответ 3

Другой способ - использовать один двойной кавычек. При вызове другого приложения вы просто используете устройство %~N в командной строке, чтобы удалить кавычки.

Если некоторые параметры, которые вы намереваетесь передать в приложение, сами являются двойными кавычками, эти символы кавычек должны повторяться дважды.

Вот иллюстрация script, которая использует первый параметр в качестве имени приложения, а второй как комбинированный список параметров для передачи в приложение:

@ECHO OFF
CALL %1 %~2

Вот примеры вызова script для разных случаев (передайте один параметр или несколько параметров или кавычек).

  • Передайте 1 параметр в приложение:

    C:\>mybatch.bat app.exe "app_param"
    C:\>mybatch.bat app.exe app_param
    
  • Передайте несколько параметров:

    C:\>mybatch.bat app.exe "app_param1 app_param2 app_param3"
    
  • Передайте параметр, который включает пробелы (и поэтому должен быть указан):

    C:\>mybatch.bat app.exe """parameter with spaces"""
    
  • Комбинированный пример: некоторые параметры имеют пробелы, другие - нет:

    C:\>mybatch.bat app.exe "param_with_no_spaces ""parameter with spaces"" another_spaceless_param"