Uso de la instrucción FOR
La instrucción FOR es un comando que le permite «repetir» o repetir comandos varias veces. Es muy similar a la instrucción FOR proporcionada en varios lenguajes de programación. La instrucción FOR se usa a menudo en archivos por lotes, pero también se puede usar directamente en la línea de comando.
Como recordatorio, la forma general del bucle FOR es:
FOR %variable IN (set) DO command [command-parameters]
Donde ‘variable’ es una sola letra, ‘(conjunto)’ especifica un conjunto de uno o más archivos, ‘comando’ es el comando del símbolo del sistema que se ejecutará para cada archivo en el conjunto y los ‘parámetros de comando’ son opcionales parámetros que se pasarán al ‘comando’.
Entonces, digamos que le han proporcionado varios archivos COM .dll que necesita registrar en el Registro de Windows. Puede ponerlos todos en una carpeta y luego ejecutar el siguiente comando desde dentro de esa carpeta:
C:\DLLs> FOR %i IN (*.dll) DO regsvr32 /s %i
Lo que hace esto, para cada archivo .dll que encuentra en el directorio actual, es ejecutar el programa regsvr32 en él. (El modificador «/ s» simplemente le dice a regsvr32 que haga su trabajo silenciosamente.) La variable usada («% i») distingue entre mayúsculas y minúsculas y asume el valor de cada archivo .dll a su vez. El nombre del archivo .dll luego se pasa al programa regsvr32 usando la misma variable «% i».
Una variante del bucle FOR general usa el modificador / L y tiene esta forma general:
FOR /L %variable IN (start,step,end) DO command [command-parameters]
Esto ejecuta un bucle donde% variable se establece primero en ‘inicio’ y se incrementa en ‘paso’ hasta que alcanza el valor ‘final’. (Este uso debería ser _ muy_ familiar para los programadores). Entonces, digamos que necesita mostrar la lista de números del 1 al 5. Puede hacerlo de esta manera:
C:\> FOR /L %i IN (1,1,5) DO @echo %i
Otra variante del bucle FOR usa el modificador / D y tiene esta forma general:
FOR /D %variable IN (set) DO command [command-parameters]
Con esta variante, si ‘set’ contiene comodines, el comando funciona con nombres de directorio en lugar de nombres de archivo. Esto sería útil, por ejemplo, si quisiera copiar un conjunto de archivos de un árbol de directorios y poner todos los archivos en un directorio.
Por ejemplo, tengo un directorio llamado \ Temp. Contiene subdirectorios llamados \ Temp \ Temp2 y \ Temp \ Barry. Los directorios \ Temp \ Barry y \ Temp \ Temp2 contienen archivos que quiero copiar. Si quisiera copiar todos los archivos (sin la estructura del directorio) en el árbol \ Temp a un directorio llamado \ Archivos, podría hacerlo así:
C:\Temp> FOR /D %i IN () DO Copy %i\.* \Files
He dejado para el final lo que creo que es la forma más esotérica del bucle FOR. Parece que usar el modificador / F le permitirá hacer casi cualquier cosa, si tan solo puede descubrir cómo usarlo. La forma general es:
FOR /F "options" %variable IN (`command`) DO command [command-parameters]
(Lo siento, no caben todos en una línea). Hay varias ‘opciones que puede usar, y el primer’ comando ‘(el que está rodeado por los apóstrofos al revés) puede ser cualquier comando del símbolo del sistema. Así que aquí hay un ejemplo de cómo usar esto:
FOR /F "Usebackq Delims==" %i IN (`dir/b c:\temp\a*.tmp`) DO @echo c:\temp\%i | Findstr /f:/ "a b c"
(Lo siento, no cabe todo en una línea). Este comando ejecuta un comando DIR / B en C: \ Temp \ A.tmp. Para cada archivo que encuentra, repite el nombre del archivo y lo canaliza al comando Findstr, que busca todas las líneas que contienen una «a», «b» o «c». Es algo bastante extraño, por supuesto, pero al menos muestra cómo puedes usar / F. Le sugiero que haga FOR /? * Para obtener una lista completa de todas las opciones, y luego, básicamente, solo estará limitado por su imaginación para descubrir cómo usarlo.
También puede utilizar el comando FOR dentro de un archivo por lotes. Lo único que es diferente es que duplica los signos%, mientras que en la línea de comandos solo usa un signo%. Por ejemplo, si el segundo ejemplo anterior se colocara en un archivo por lotes, se vería así:
FOR /L %%i IN (1,1,5) DO @echo %%i
Este consejo (13196) se aplica a Windows 7, 8 y 10.