Te explico esta línea que es la parte que no entiendes:
Empiezo desde el principio el
FOR con la opción /
R (recursive)
Guía el directorio del árbol de raíz a [unidad:]ruta, ejecutando la instrucción FOR en cada directorio del árbol.
Si no se especifica el directorio después de /R entonces se asume que es el directorio actual.
Si el conjunto es solamente un simple carácter de punto (.) entonces enumerará el árbol del directorio.
El CALL
Cuando un programa BAT llama a otro BAT al finalizar el segundo NO vuelve al primero en el punto que lo llamo.
Para que vuelva desde donde se le llamo se usa el comando CALL
El CALL antiguamente solo se podía utilizar para llamar a otro BAT ¿pero que pasa si se quiere ejecutar un trozo de lineas varias veces desde el mismo BAT sin crear un segundo BAT? Habían varias formas de hacerlo a cual mas pedestre.
Te contare una que es en la que se ha convertido el CALL:
El CALL llamaba a propio BAT o dicho de otra forma el BAT se llamaba a si mismo y se pasaba parámetros y al principio del BAT se miraba si habían parámetros y saltaba a una línea determinada se ejecutaba y volvia al punto de partida:
Te voy a poner un ejemplo de como funciona Ahora como funcionaba antiguamente:
AHORA:
RESULTADO:
ANTES:
RESULTADO:
En el primer BAT se ha convertido el
Call %0 Etiqueta por
call :Etiqueta y hace lo mismo que el IF que hay al principio del segundo BAT sin necesidad de ponerla y como no lo vuelve a llamar la palabra
Inicio solo sale una vez en el primer bat y dos en el segundo.
Si le quitas la línea de Inicio los dos BATS hacen lo mismo.
El
goto :EOF equivale a un GOTO a la ultima línea física del BAT.
Espero haberme explicado y que se pueda entender y lo mejor para entender es usar la opción /? con los comandos para ver la ayuda y hacer pruebas para entenderlo mejor.
Saludos.
\\//_