08.02.2022 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!