Поиск…


Аргументы командной строки, переданные в пакетные файлы

Параметрами командной строки группового файла являются значения параметров, представленные при запуске пакета. Они должны быть заключены в кавычки, если они содержат пробелы. В запущенном пакетном файле аргументы используются для различных целей, то есть перенаправления на :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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow