Buscar..


Argumentos de línea de comando suministrados a archivos por lotes

Los argumentos de línea de comando del archivo de lote son valores de parámetros enviados al iniciar el lote. Deben incluirse entre comillas si contienen espacios. En un archivo por lotes en ejecución, los argumentos se utilizan para varios propósitos, es decir, la redirección a :labels , variables de configuración o comandos en ejecución.

Los argumentos se mencionan en el archivo por lotes usando %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!

Notas:

  • En el ejemplo anterior, las comillas dobles se eliminan utilizando el modificador de argumento %~1 .
  • Las cadenas largas se dividen en varias líneas usando ^ , y hay un espacio antes del carácter en la siguiente línea.

Archivos por lotes con más de 9 argumentos

Cuando se suministran más de 9 argumentos, se puede usar el comando shift [/n] , donde /n significa comenzar en el enésimo argumento, n está entre cero y ocho.

Bucle a través de argumentos:

:args
set /a "i+=1"
set arg!i!=%~1
call echo arg!i! = %%arg!i!%%
shift
goto :args

Tenga en cuenta que, en el ejemplo anterior, la variable de expansión retardada i se utiliza para asignar valores de argumento a la matriz de variables. El comando de call permite mostrar dichos valores variables dentro del bucle.

Contando argumentos:

for %%i in (%*) do (set /a ArgCount+=1)
echo %ArgCount%

Establecer una variable en el argumento n:

set i=5
call set "path%i%=%%~i"

Cambiando argumentos dentro de paréntesis

Vamos a tener el siguiente example.bat y lo llamamos con los argumentos 1 , 2 y 3 :

@echo off

(
    shift
    shift
    echo %1
)

Como la expansión de la variable cambiará después de que se alcance el contexto de los corchetes finales, la salida será:

1

Como esto podría ser un problema al desplazar entre paréntesis para acceder al argumento, deberá usar la llamada:

@echo off

(
    shift
    shift
    call echo %%1
) 

Ahora la salida será 3 . A medida que se usa el comando CALL (que dará lugar a una expansión de variable adicional) con esta técnica, los argumentos de acceso también se pueden parametrizar:

@echo off

set argument=1

    shift
    shift
    call echo %%%argument%

con expansión retrasada:

@echo off
setlocal enableDelayedExpansion
set argument=1

    shift
    shift
    call echo %%!argument!

la salida será

3



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow