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