Ответ 1
Есть волшебный путь! Я знал это, но я не мог этого запомнить.
его %*
В моем пакетном файле я хочу передать несколько параметров в другое приложение.
Теперь я это делаю
app.exe %1 %2
и он может передавать только два параметра, но я хочу передать все параметры, которые передаются в пакет (я предпочел бы не писать% 1% 2% 3% 4...)
Есть ли волшебный способ сделать это?
Есть волшебный путь! Я знал это, но я не мог этого запомнить.
его %*
Вы можете использовать команду 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
Это может быть полезно, если вам нужен какой-то динамический подсчет параметров или если вы хотите запретить определенный параметр.
Другой способ - использовать один двойной кавычек. При вызове другого приложения вы просто используете устройство %~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"