Использование параметров в пакетных файлах в командной строке Windows

В Windows, как вы получаете доступ к аргументам, переданным при запуске командного файла?

Например, скажем, у меня есть программа с именем hello.bat. Когда я ввожу hello -a в командной строке Windows, как я могу сообщить своей программе, что -a был передан как аргумент?

Ответ 1

Как уже говорили другие, параметры, проходящие через командную строку, могут быть доступны в пакетных файлах с обозначением %1 до %9. Есть также два других токена, которые вы можете использовать:

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

В дополнение к простому доступу к параметрам есть множество важных приемов.

Проверка, прошел ли параметр

Это делается с конструкциями типа IF "%~1"=="", который является истинным тогда и только тогда, когда никакие аргументы вообще не передавались. Обратите внимание на символ тильды, который заставляет любые окружающие кавычки удаляться из значения %1; без тильды вы получите неожиданные результаты, если это значение включает в себя двойные кавычки, включая возможность синтаксических ошибок.

Обработка более 9 аргументов (или просто облегчение жизни)

Если вам нужно получить доступ к более чем 9 аргументам, вы должны использовать команду SHIFT. Эта команда сдвигает значения всех аргументов в одном месте, так что %0 принимает значение %1, %1 принимает значение %2 и т.д. %9 принимает значение десятого аргумента (если один присутствует), который не был доступен через любую переменную перед вызовом SHIFT (введите команду SHIFT /? для получения дополнительных параметров).

SHIFT также полезен, когда вы хотите легко обрабатывать параметры, не требуя, чтобы они были представлены в определенном порядке. Например, script может распознавать флаги -a и -b в любом порядке. Хорошим способом анализа командной строки в таких случаях является

:parse
IF "%~1"=="" GOTO endparse
IF "%~1"=="-a" REM do something
IF "%~1"=="-b" REM do something else
SHIFT
GOTO parse
:endparse
REM ready for action!

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

Замена параметров партии

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

Например, чтобы получить размер файла, переданного в качестве аргумента, используйте

ECHO %~z1

Чтобы получить путь к каталогу, из которого был запущен командный файл (очень полезно!), вы можете использовать

ECHO %~dp0

Вы можете просмотреть весь спектр этих возможностей, введя CALL /? в командной строке.

Ответ 2

Использование параметров в пакетных файлах:% 0 и% 9

Пакетные файлы могут ссылаться на слова, переданные в качестве параметров с токенами: %0 до %9.

%0 is the program name as it was called.
%1 is the first command line parameter
%2 is the second command line parameter
and so on till %9.

параметры, переданные в командной строке, должны быть буквенно-цифровыми символами и разделены пробелами. Поскольку %0 - это имя программы, которое было вызвано, в DOS %0 будет пусто для AUTOEXEC.BAT, если оно запущено во время загрузки.

Пример:

Поместите следующую команду в пакетный файл с именем mybatch.bat:

@echo off
@echo hello %1 %2
pause

Вызов командного файла следующим образом: mybatch john billy будет выводить:

hello john billy

Получить более 9 параметров для пакетного файла, используйте:% *

Значок Процент Звезды %* означает "остальные параметры". Вы можете использовать цикл for для их захвата, как определено здесь:

http://www.robvanderwoude.com/parameters.php

Заметки о разделителях для параметров партии

Некоторые символы в параметрах командной строки игнорируются пакетными файлами, в зависимости от версии DOS, независимо от того, являются ли они "экранированными" или нет, и часто в зависимости от их местоположения в командной строке:

commas (",") are replaced by spaces, unless they are part of a string in 
double quotes

semicolons (";") are replaced by spaces, unless they are part of a string in 
double quotes

"=" characters are sometimes replaced by spaces, not if they are part of a 
string in double quotes

the first forward slash ("/") is replaced by a space only if it immediately 
follows the command, without a leading space

multiple spaces are replaced by a single space, unless they are part of a 
string in double quotes

tabs are replaced by a single space

leading spaces before the first command line argument are ignored

Ответ 3

Используйте переменные, т.е. переменные .BAT и называемые %0 to %9

Ответ 4

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

Если у вас есть Hello.bat и содержимое:

@echo off
echo.Hello, %1 thanks for running this batch file (%2)
pause

и вы вызываете команду batch в команде через

hello.bat APerson241% date%

вы должны получить это сообщение:

Здравствуйте, APerson241 благодарит за запуск этого командного файла (01/11/2013)