For
Ejecuta un comando especificado para cada archivo de un conjunto de archivos.
Sintaxis
for {%variable | %%variable} in (grupo) do comando [opcionesDeLíneaDeComandos]
Parámetros
{%variable | %%variable}
Bueno, pues este comando es un poco mas complicado, pero no tanto, este comando lo que hace es generar un bucle, que es un bucle?, bueno es la repeticion de una accion, esto se utiliza para no tener que escribir un mismo codigo varias veces, ahorrando tiempo y dando claridad al programa.
For = Para, in = en, do = hacer, por lo que la sintaxis diria: Para la variable en el grupo hacer tal comando, la variable va a ser un numero mas que nada,
por lo que si la variable vale 5, el bucle se va a repetir 5 veces, hay dos formas de hacer un bucle for en batch, bueno hay varias, pero las mas sencillas son: metiendo a la variable el numero de archivos que exista, o metiendo a la variable un numero determinado. Primero veremos como se hace con archivos.
A otra cosa que se me olvido explicar es que la variable va a llevara al inicio un solo signo % cuando se ejecute en la consola, y dos signos % cuando se ejecute en un proceso por lotes (cuando hagas un programita), yo voy a utilizar el %% porque es el que nos interesa.
Tambien tengo que explicarles que la variable no puede ser un numero, pero si una letra, cabe mencionar que el comando for distingue entre mayusculas y minusculas, por lo que no es lo mismo la variable %a y %A, y solo pueden estar 52 variables activas al mismo tiempo (si multiplicas el numero de letras por 2 (mayusculas y minusculas) te da 52 jejje).
Ahora si, ejemplos:
supongamos que en un directorio tenemos varios archivos, y que tenemos:
tarea1.txt
tarea2.txt
tarea3.txt
foto1.jpg
foto2.jpg
foto1.bmp
foo_fighters.mp3
entonces lo que vamos a hacer es darle a la variable los archivos que queremos para que los tome como numero, ejmplo, si queremos tomar una accion para todos los archivos hacemos lo sig.:
for %%e in (*.*) do copy %%e a:\respaldo
Los parentesis siempre los tienen que poner, el for, in, do nunca cambian. Aqui lo que hacemos es simplemente decirle al for que para todos los archivos con cualquier extension que tenemos(con el comodin *) haga la siguiente accion, que es copiarlos a la unidad a:\ en la carpeta respaldo.
Otro ejemplo, si queremos borrar los archivos con extension .txt, hariamos lo sig.:
for %%g in (*.txt) do del %%g
Como ven, les menti un poco anteriormente, porque la variable en si lo que tiene dentro es el nombre del archivo que esta ejecutando, o sea que el bucle se ejecuta tantas veces como grupo de archivos haya, pero lo bueno es que se entiende no?, aqui lo unico que se hizo fue: al existir un archivo .txt guardo el nombre del archivo en la variable, entro en el bucle una vez, e hizo la accion de borrar el archivo que contenia la variable, en este caso el primer archivo, despues checo si existia un segundo archivo .txt, como si existia un segundo, cambio el valor de la variable por el segundo archivo,entro al bucle de nuevo y borro el archivo cque contenia la variable, verifico si existia un tercer archivo .txt, y como si existia, cambio el valor de la variable por el tercer archivo con extension .txt, entro al bucle y... ya se imaginaran lo que hizo, despues, verifico si existia un cuarto archivo con extension .txt y al no encontrarlo salio del bucle.
Para hacer este procedimiento sin un for, tendriamos que haber utilizado varios if y varios goto, por lo que el programa quedaria muy grande, cuando con un for de una linea podemos hacer una accon repetida las veces que sea necesario, como ven es muy util el for, aunque hay que saber utilizarlo, de otra forma no les facilitara las cosas demasiado.
Otro ejemplo, si queremos renombrar todos los archivos que tengan el nombre foto1 con cualquier extension hariamos lo sig.:
for %%L in (fot1.*) do ren %%L foto.txt
Con esto renombramos a todos los archivos foto1 de cualquier extension a foto con extension .txt
Si queremos mover mover todos los archivos que empiezen por f con cualquier extensio, hacemos lo sig.:
for %%C (f*.*) do mv %%C "e:\mis cosas"
Listo, ya entendieron creo.
Ahora veamos el otro tipo de for que les mencione antes.
Para esto utilizaremos el parametro /L del comando for, lo que vamos a hacer es, en lugar de poner un archivo o grupo de archivos entre parentesis vamos a poner un numero inicial, un contador y un numero final, el numero inicial es el numero en el que iniciara el bucle, el contador sera el numero que se le sumara a la variable, y el numero final sera cuando termine el bucle, con lo que si el numero de la variable es mayor o sobrepasa al numero final, terminara el bucle.
Vamos a hacer la secuencia en la mente, si el ni(numero inicial) es 1, el cont(contador es 1, y el nf(numero final) es 5, lo que pasaria seria lo sig.
La variable(var) toma el valor de ni, ejecuta el comando, var toma el valor de var + cont (1 + 1 = 2), ejecuta el comando, verifica si var es mayor que nf, como no lo es entra al bucle, var toma el valor de var + cont (2 + 1 = 3), ejecuta el comando, verifica si var es mayor que nf, como no lo es entra al bucle,var toma el valor de var + cont, ejecuta el comando,verifica si var es mayor que nf, como no lo es entra al bucle, ..., var(4) toma el valor de var + cont (4+1=5), verifica si var es mayor que 5, como es igual, ejecuta de nuevo el comando, pero la siguiente vuelta var sera igual a 6, entonces saldra del bucle.
Es bueno saber el procedimiento en la mente de un bucle for, porque en otros lenguajes existen otro tipo de bucles, como el while, que es un bucle tambien, pero la verificacion para salir o seguir en el bucle se da despues de haber ejecutado la accion, por lo que en un bucle while siempre se ejecutara una vez la accion, no importa cual se la condicion para salir o seguir en el bucle, bueno pero ese es otro tema, aun asi tenganlo en cuenta
.
La sintaxis es:
for /L %%variable in (1,1,5) do comando
Tambien se puede hacer en forma decreciente poniendo como ni el numero mayor, como cont un numero negativo, y como nf el numero menor, ejemplo:
for /L %%variable in (5,-1,1) do comando
Por lo que empezara por el 5 hasta llegar al 0 donde se saldra del bucle por ser menor que 1.
Marcadores