batch-file
Аргументы командной строки командного файла
Поиск…
Аргументы командной строки, переданные в пакетные файлы
Параметрами командной строки группового файла являются значения параметров, представленные при запуске пакета. Они должны быть заключены в кавычки, если они содержат пробелы. В запущенном пакетном файле аргументы используются для различных целей, то есть перенаправления на :labels
, установки переменных или запущенных команд.
Аргументы упоминаются в пакетном файле с использованием %1, %2, ..., %9
.
@echo off
setlocal EnableDelayedExpansion
if not "%1"=="" (
set "dir=%~1" & set "file=%~2"
type !dir!\!file! | find /n /i "True" >nul^
&& echo Success! || echo Failure
)
exit /b
C:\Users\UserName> test.bat "C:\Temp\Test Results" "Latest.log"
Success!
Заметки:
- В приведенном выше примере двойные кавычки удаляются с помощью модификатора аргумента
%~1
. - Длинные строки разделяются на несколько строк, используя
^
, и перед символом на следующей строке есть пробел.
Пакетные файлы с более чем 9 аргументами
Когда подано более 9 аргументов, можно использовать команду shift [/n]
, где /n
означает начало с n-го аргумента, n - от нуля до восьми.
Цитирование через аргументы:
:args
set /a "i+=1"
set arg!i!=%~1
call echo arg!i! = %%arg!i!%%
shift
goto :args
Обратите внимание, что в приведенном выше примере замедленная переменная расширения i
используется для назначения значений аргументов массиву переменных. Команда call
позволяет отображать такие значения переменных внутри цикла.
Подсчет аргументов:
for %%i in (%*) do (set /a ArgCount+=1)
echo %ArgCount%
Установите переменную в n-й аргумент:
set i=5
call set "path%i%=%%~i"
Смещение аргументов внутри скобок
Давайте получим следующий example.bat
и вызовите его с аргументами 1
, 2
и 3
:
@echo off
(
shift
shift
echo %1
)
Поскольку изменение переменной будет меняться после достижения контекста конечных скобок, выход будет:
1
Поскольку это может быть проблемой при перемещении внутри скобок для доступа к аргументу, вам необходимо использовать вызов:
@echo off
(
shift
shift
call echo %%1
)
теперь выход будет 3
. Поскольку команда CALL
используется (что приведет к дополнительному расширению переменной), этот метод может также параметризоваться:
@echo off
set argument=1
shift
shift
call echo %%%argument%
с задержкой расширения:
@echo off
setlocal enableDelayedExpansion
set argument=1
shift
shift
call echo %%!argument!
выход будет
3