Как передать несколько параметров в пакетном режиме? - PullRequest
16 голосов
/ 02 февраля 2011

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

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

app.exe %1 %2

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

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

Ответы [ 3 ]

36 голосов
/ 02 февраля 2011

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

его %*

4 голосов
/ 07 февраля 2011

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

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

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

@ECHO OFF
CALL %1 %~2

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

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

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

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

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

    C:\>mybatch.bat app.exe "param_with_no_spaces ""parameter with spaces"" another_spaceless_param"
    
3 голосов
/ 02 февраля 2011

Вы можете использовать приглашение 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

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

...