off - Usar parámetros en archivos por lotes en la línea de comandos de Windows
comandos ms-dos (4)
Como ya han dicho otros, se puede acceder a los parámetros que pasan a través de la línea de comando en archivos por lotes con la notación %1
a %9
. También hay otros dos tokens que puedes usar:
-
%0
es el nombre del archivo ejecutable (archivo por lotes) especificado en la línea de comando . -
%*
son todos los parámetros especificados en la línea de comandos ; esto es muy útil si desea reenviar los parámetros a otro programa.
También hay muchas técnicas importantes a tener en cuenta, además de simplemente cómo acceder a los parámetros.
Comprobando si se pasó un parámetro
Esto se hace con construcciones como IF "%~1"==""
, que es verdadera si y solo si no se pasaron los argumentos. Tenga en cuenta el carácter de tilde que hace que las comillas que rodean se eliminen del valor de %1
; sin una tilde obtendrá resultados inesperados si ese valor incluye comillas dobles, incluida la posibilidad de errores de sintaxis.
Manejando más de 9 argumentos (o simplemente haciendo la vida más fácil)
Si necesita acceder a más de 9 argumentos, debe usar el comando SHIFT
. Este comando desplaza los valores de todos los argumentos un lugar, de modo que %0
toma el valor de %1
, %1
toma el valor de %2
, etc. %9
toma el valor del décimo argumento (si hay uno presente), que no estaba disponible a través de ninguna variable antes de llamar a SHIFT
(ingrese el comando SHIFT /?
para obtener más opciones).
SHIFT
también es útil cuando desea procesar fácilmente parámetros sin requerir que se presenten en un orden específico. Por ejemplo, una secuencia de comandos puede reconocer las banderas -a
y -b
en cualquier orden. Una buena forma de analizar la línea de comando en tales casos es
: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!
Este esquema le permite analizar líneas de comando bastante complejas sin volverse loco.
Sustitución de los parámetros del lote
Para los parámetros que representan nombres de archivos, el shell proporciona muchas funcionalidades relacionadas con el trabajo con archivos a los que no se puede acceder de ninguna otra manera. Se accede a esta funcionalidad con construcciones que comienzan con %~
.
Por ejemplo, para obtener el tamaño del archivo pasado como un uso de argumento
ECHO %~z1
Para obtener la ruta del directorio desde el que se inició el archivo por lotes (¡muy útil!) Puede usar
ECHO %~dp0
Puede ver el rango completo de estas capacidades escribiendo CALL /?
en el símbolo del sistema.
En Windows, ¿cómo accede a los argumentos que se pasan cuando se ejecuta un archivo por lotes?
Por ejemplo, digamos que tengo un programa llamado hello.bat
. Cuando ingreso hello -a
en una línea de comando de Windows, ¿cómo hago para que mi programa sepa que -a
se pasó como un argumento?
Los archivos por lotes pasan automáticamente el texto después del programa, siempre y cuando sean variables para asignarlos. Se pasan para que sean enviados; por ejemplo,% 1 será la primera cadena que se envíe después de que se llame al programa, etc.
Si tiene Hello.bat y los contenidos son:
@echo off
echo.Hello, %1 thanks for running this batch file (%2)
pause
e invocar el lote en comando a través de
hello.bat APerson241% date%
Deberías recibir este mensaje de vuelta:
Hola, APerson241 gracias por ejecutar este archivo por lotes (01/11/2013)
Usar variables, es decir, las variables .BAT
y llamado %0
a %9
Usar parámetros en archivos por lotes:% 0 y% 9
Los archivos por lotes pueden hacer referencia a las palabras pasadas como parámetros con los tokens: %0
a %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.
los parámetros que se pasan en la línea de comandos deben ser caracteres alfanuméricos y delimitados por espacios. Como %0
es el nombre del programa como se llamó, en DOS %0
estará vacío para AUTOEXEC.BAT si se inicia en el momento del arranque.
Ejemplo:
Coloque el siguiente comando en un archivo por lotes llamado mybatch.bat
:
@echo off
@echo hello %1 %2
pause
Invocando el archivo por lotes como este: mybatch john billy
daría salida:
hello john billy
Obtenga más de 9 parámetros para un archivo por lotes, use:% *
El porcentaje de token de estrella %*
significa "el resto de los parámetros". Puede usar un ciclo for para tomarlos, como se define aquí:
http://www.robvanderwoude.com/parameters.php
Notas sobre los delimitadores para los parámetros del lote
Algunos caracteres en los parámetros de línea de comando son ignorados por los archivos por lotes, dependiendo de la versión de DOS, ya sea que estén "escapados" o no, y a menudo dependiendo de su ubicación en la línea de comando:
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