- 6.1 Variables especiales (o Variables de parámetro) (o Variables de argumentos)
Las variables especiales son un tipo de variables predefinidas que pueden cambiar su valor constantemente,
Estas son todas las variables especiales:
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*En ellas se guarda el orden de los argumentos que le pasemos a nuestro script.
Un argumento es una cadena de caracteres delimitados por un espacio o por comillas dobles, esto quiere decir que una cadena encerrada entre comillas cuenta como un argumento
"Esto es un argumento" "Y esto otro argumento"
Pero si no usamos comillas, los argumentos se separan por espacios:
Esto son cuatro argumentos
1 2 3 4
La variable %0 no la consideraremos realmente un argumento, porque en ella se guarda la ruta de nuestro script.
@Echo OFF
Echo %0
Pause >NUL
Si usamos una subrutina, el argumento %0 pasa a ser el nombre de la etiqueta de la subrutina, y será el siguiente número de variable (
%1) el que realmente empezará a guardar el primer argumento que le pasemos:
@Echo OFF
call :subrutina "argumento 1"
:subrutina
Echo %0
Echo %1
Pause >NUL
Podemos usar la variable especial con comodín
%*, esta variable reune todos los argumentos que le pasemos al script:
@Echo OFF
call :subrutina arg1 arg2 arg3 arg4 arg5
:subrutina
Echo %*
Pause >NUL
(El argumento 0 se omite)
Habeis visto que solo existen 10 variables especiales con números, pero descontando la variable
%0, nos quedan 9 variables, ¿que pasa si necesitamos usar más de 9 argumentos... si por ejemplo necesitamos usar el arhumento 10?
Bien, pues el valor de las variables especiales se puede desplazar hacia la izquierda son el comando
SHIFT, consiguiendo que el valor que había por ejemplo en la variable
%3 pase a la variable
%2, y el valor de la imaginaria variable
%10 pase a la variable
%9, entonces ya podremos usar nuestro 10º argumento en la variable
%9SHIFT /?
Cambia la posición de parámetros reemplazables
SHIFT [/n]
Si las extensiones de comando están habilitadas,
el comando SHIFT admitirá el modificador /n,
el cual informa al comando que empiece a cambiar en el argumento n, en donde n puede estar comprendido entre 0 y 8.
Por ejemplo:
SHIFT /2
cambiará %3 a %2, %4 a %3, etc. y deja %0 y %1 sin modificar.
Ejemplo:
@Echo OFF
call :subrutina a b c d e
:subrutina
Echo Antes del "Left Shift":
Echo arg1 = %1
Echo arg2 = %2
Echo arg3 = %3
Echo arg4 = %4
Echo arg5 = %5
Echo+
SHIFT /1
Echo Despues del "Left Shift":
Echo arg1 = %1
Echo arg2 = %2
Echo arg3 = %3
Echo arg4 = %4
Echo arg5 = %5
Pause >NUL
NOTA: El comando SHIFT no afecta a la variable especial %*, esta variable no se puede desplazar.
- Expansión de variables especiales (o Argumentos) y de variables de FOR
La gran ventaja de las variables especiales y variables de FOR es que pueden ser expandidas para mostrar únicamente los datos que nos interesen, como por ejemplo, el tamaño del argumento, la extensión del archivo, la fecha de modificación, etc.
Esto se realiza usando el operador
~ seguido de uno de los siguientes caracteres (los caracteres se pueden combinar).
%~0 - expande %0 quitando las comillas (") que pudiera haber
%~f0 - expande %0 a un nombre de ruta completo
%~d0 - expande %0 solo a una letra de unidad
%~p0 - expande %0 solo a una ruta
%~n0 - expande %0 solo a un nombre de archivo
%~x0 - expande %0 solo a una extension de archivo
%~s0 - ruta expandida contiene solo nombres cortos
%~a0 - expande %0 a atributos de archivos
%~t0 - expande %0 a fecha/hora del archivo
%~z0 - expande %0 a tamaño del archivo
%~$PATH:0 - busca los directorios de la lista de la variable de entorno de PATH y expande %0 al nombre del primero que se encuentre.
Ejemplo:
@Echo OFF
Echo Argumento con comillas:
Echo %0
Echo.
Echo Argumento sin comillas:
Echo %~0
Echo.
Echo Ruta completa del argumento:
Echo %~f0
Echo.
Echo Letra de unidad del argumento:
Echo %~d0
Echo.
Echo Ruta del argumento:
Echo %~p0
Echo.
Echo nombre del argumento:
Echo %~n0
Echo.
Echo Extension del argumento:
Echo %~x0
Echo.
Echo Ruta de nombre corto del argumento:
Echo %~s0
Echo.
Echo Atributos del argumento:
Echo %~a0
Echo.
Echo Fecha/Hora dle argumento:
Echo %~t0
Echo.
Echo Tamanyo del argumento:
Echo %~z0
Pause >NUL
@Echo OFF
FOR %%a in (*) DO (
Echo Ruta: %%~fa
Echo Letra: %%~da
Echo Carpeta: %%~pa
Echo Nombre: %%~na
Echo Extension: %%~xa
Echo Atributos: %%~aa
Echo Fecha/H.: %%~ta
Echo Tamanyo: %%~za
Echo+
)
Pause >NUL