batch-file-es Windows
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
ya que (como se ve, al ver la ejecución del script en la ventana de comandos) se evalúa para:
SET VAR=Hello
FOR /L %%a in (1,1,2) do (
echo Hello
SET VAR=Goodbye
)
En el ejemplo anterior, el comando ECHO se evalúa como Hello cuando el script se lee en la
memoria, por lo que el script repetirá Hello para siempre, sin embargo, se realizan muchos pasos
a través del script.
La forma de lograr el comportamiento variable más "tradicional" (de la variable que se está
expandiendo mientras se ejecuta el script) es habilitar la "expansión retrasada". Esto implica
agregar ese comando a la secuencia de comandos antes de la instrucción de bucle
(generalmente un bucle FOR, en una secuencia de comandos por lotes), y usar un signo de
exclamación (!) En lugar de un signo de porcentaje (%) en el nombre de la variable:
setlocal enabledelayedexpansion
SET VAR=Hello
FOR /L %%a in (1,1,2) do (
echo !VAR!
SET VAR=Goodbye
)
endlocal
imprimirá
Hello
Goodbye
La sintaxis %%a in (1,1,2) hace que el bucle se ejecute 2 veces: en la primera ocasión, la variable
lleva su valor inicial de 'Hola', pero en la segunda pasada a través del bucle, después de haber
ejecutado la segunda La instrucción SET como la última acción en la 1ª pasada, ha cambiado al
valor revisado 'Adiós'.
Sustitución avanzada de variables
Ahora, una técnica avanzada. El uso del comando CALL permite al procesador de comandos por
lotes expandir una variable ubicada en la misma línea del script. Esto puede ofrecer una
expansión multinivel, mediante el uso repetido de LLAMADAS y modificadores.
Esto es útil en, por ejemplo, un bucle FOR. Como en el siguiente ejemplo, donde tenemos una
lista numerada de variables:
"c:\MyFiles\test1.txt" "c:\MyFiles\test2.txt" "c:\MyFiles\test3.txt"
Podemos lograr esto usando el siguiente bucle FOR:
setlocal enabledelayedexpansion
for %%x in (%*) do (
https://riptutorial.com/es/home 84