Este manual va dirigido a gente que no tenga ni idea de este lenguaje.
Va a estar dividido en capitulos que los hire poniendo cada un dia , mas o menos.
Cualquier duda o sugerencia escribanla.
Quiero decir que algunas partes las he sacado de otros manuales y hay algunas partes hechas por mi.
Capitulo 1: Introduccion y primeros comandos.
Los programas que se hacen en batch suelen tener la extension .bat de ahi su nombre es posible cambiar esta extension con programas.
Bueno para programar en bat necesitas un editor de texto plano ( recomiendo el bloc de notas ) .Utiliza como compiler el cmd.
Ni se les ocurra programar en word o wordpad ya que no se puede porque no son editores de texto plano.
En este capitulo les enseñare el funcionamiento de echo, exit, pause, rem, goto y cls.
echo
Sirve para escribir en la pantalla ( por ahora nos quedamos con eso al llegar a los redireccionamientos veremos que hace mas cosas).
Normalmente los programas empiezan por @echo off esto sirve para q no aparezca al ejecutarse las lineas del cmd ( c.\documents & settings\user.). Si no entienden algo no pasa nada , con los ejemplos se entendera.
pause
Sirve para detener el programa hasta que se pulse una tecla.
exit
Sirve para salir del programa.
Ejemplo:
En todos los lenguajes se suele empezar con este programa lo que hace es escribir en la pantalla Hola con echo ,esperar una tecla con pause y salir con exit.
Creas un bloc de notas introducis ese codigo , luego vamos a archivo - guardar como y le ponemos el nombre que queramos , pero al final con la entencion .bat.
Si al comando pause se le añade > nul ( pause > nul) , no pone en la pantalla lo de : presione una tecla para continuar..., y se sigue ejecutando de la misma forma.
Ahora explico los comandos rem , goto y cls
rem
Este comando sirve para poner comentarios en el codigo. se podria decir que hace lo contrario que echo lo pasa por la pantalla y rem lo "esconde".
su sintaxis es la siguiente:
rem comentario
goto
Los codigos bat suelen estar divididos en partes. una parte de un bat tiene la siguiente estructura (:nombreparte). este comando lo que hace es ir a una parte ( go to= ir a ) , tranquilos si no lo entendes , pero en los ejemplos lo veras claro .Igual lo de dividir un programa en partes no se ve muy util pero cuando lleguemos al comando if sabras cual es la utilidad de dividir.
la sintaxis de goto es esta:
goto nombreparte(sin los dos puntos)
cls
Este comando sirve para borrar la pantalla.
sintaxis:
cls (se pone tal cual sin nada mas)
Ejemplo:
Capitulo 2: Variables.
Bueno este capitulo hablaremos de la declaracion de variables y de los tipos, tambien hablaremos de las variables de expansion.
Como declarar un variable
Es tan sencillo como esto:
Set nombrevariable= valor
Para llamar a la variable en un lugar del programa se debe hacer de esta manera:
%nombrevariable% ( es decir, entre tantos por ciento "%")
Esta variable puede contener tanto palabras como numeros, pero no operaciones como + - / etc en el capitulo siguente explicare como hacer
operaciones con variables. en este voy a explicar como hacer para que tu programa consiga una variable por el usuario.
esto se hace de esta manera:
Set /p nombrevariable= Lo que saldra en la pantalla para que el usuario lo rellene(ejemplo Nombre: )
Ejemplo:
Bueno empezamos con lo de las operaciones con variables:
Para hacer operaciones (suma,resta,division etc) se ace con set /a .
sintaxis
set /a VariableEnLaQu eSeGuardaraElR esultado= variable +(o cualkier otra opercion) variable2
Ejemplo
Supongamos que tengo una variable a=2 y otra b=3 y quiero sumar las 2.
el resultado de esta suma quiero q este en c.
Se haria asi:
set /a c=a+b
Tambien es posible hacerlo asi pero es perder tiempo:
set /a c=%a%+%b%
Alumno: A¿ y q pasa si pongo set c= a+b ?
yo: la variable c seria "a+b"
A. A¿ y si pongo set c= %a%+%b%?
Y. que la variable c seria "2+3"
Bien la declaracion de variables ya esta dada.
Ahora voy a acer un pequeño repaso de lo que sabemos hasta ahora ( de variables):
set variable=valor
asignar un valor a una variables nosotros en el momento de la programacion.
set /p variable=pregunta
el usuario da el valor a esta variable respondiendo a la pregunta.
set /a variable=operacion
realiza la operacion y guarda el valor en la variables.
para ver las operaciones que se pueden realizar poned en cmd "set /?" sin las comillas .
Ejemplo:
Capitulo 3: If
El comando if sirve para hacer algo en caso de que se cumpla una condicion impuesta a una variable.C on este comando ,por ejemplo, podemos hacer menus. Su sintaxis es esta:
If [not] condicion accion
*el not es opcional y sirve para expresar la condicion de forma negativa ( ej/ if not %var1%==1 echo mal // si var1 NO es iwal a 1 escribe mal)
Las condiciones que se suelen utilizar son :
variable==valor (para expresar si la variable es igual a valor az esto)
variable LSS valor(" " " " " es menor a valor az esto)
variable GTR valor(" " " " " es mayor a valor az esto)
variable LEQ valor(" " " " " es menor o igual az esto)
variable GEQ valor(" " " " " es mayor o igual az esto)
Ejemplo:
Como dije el if vale para hacer algo segun condiciones que pongamos. pero que pasa si las condiciones que ponemos no se cumplen?
simplemente ( al ser un lenguaje lineal) pasa a la linea siguiente. Hacer esto da muchos errores:
por que da errores??
por que si el usuario se confunde y pulsa 4. Proba a ver que pasa.
hace lo que quiere.
MUy bien y como se resuelve? pues con un comando muy sencillo llamado else y unos paretesis.
la sintaxis seria esta
IF condiciones (accion1*) ELSE accion2
explicacion //SI las condiciones son verdaderas haz accion1 SINO haz accion2
*la accion1 ha de ir obligartoriame entre parentesis
Ejemplo:
ahora diras , que es &&??
sirve para "decir al programa" haz esto (y) estor (y) esto.
el nexo conpulativo y se sutituye en nuestro programa por &&.
bien ahora imaginemos que queremos que el programa haga algo si existe tal archivo.
Pues bien esto se ace con IF EXIST.
su sintaxis:
IF EXIST rutaarchivo accion
por supuestro se puede combinar con else:
IF EXIST rutaarchivo (accion1) ELSE accion2
Ejemplo:
Capitulo 4: Redirecionamientos.
Vamos a ver, imaginemos que queremos hacer un programa que guarde cierta informacion en un archivo. ese archivo se va a llamar ola.txt.
bien para guardar informacion en un archivo se hace con los redireccionamientos (echo ..... >> archivo....).
Ejemplo:
Se haria asi:
que diferencia hay entre > y >>?
> = borra lo que aya en el archivo y escribe ( es decir sobreescribe )
por ejemplo:
echo echo ola > c:\ola.txt
borra todo lo que hay en ola.txt y luego escribe echo ola
>> = escribe respetando el texto anterior
por ejemplo
echo exit >> c:\ola.txt
quedaria asi:
echo ola( respeta lo que hay)
exit
Ejemplo que mas o menos resume bastante:
Capitulo 5: Comando For.
Commando FOR
SINTAXIS:
FOR %variable IN (cjto) DO comando
donde:
%variable: es la variable que va a tomar el valor correspondiente en cada iteraccion del for siendo de una unica letra, distinguiendo entre MAY y min (o numero)
cjto: un cjto de ficheros
comando: lo que queremos hacer en cada vuelta del for
Observaciones:
Dentro de un bat, se debe usar %%variable (no %variable), esto se debe a que como he dicho antes,
%variable puede tomar un numero, por lo que se podria confudir con los parametros del bat, si solo
se pusiese un %
PARAMETROS:
FOR /D %variable IN (conjunto) comando DO [parámetros]
se usa cuando las extensiones de comandos estan habilitadas
FOR /R [[unidad:]ruta] %variable IN (set) DO comando [parámetros]
Cuando usamos comodines, para ejecutar el for recursivamente dentro de un directorio especificado
(unidad:ruta) en los archivos especificados por los comodines
FOR /L %variable IN (ini,paso,fin) DO comando [parámetros]
Este es el típico FOR de toda la vida. supongo ini=0 paso=1 y fin=4, se crearia la sucesion 0,1,2,3,4,5
FOR /F ["opciones"] %variable IN (cjto archivos) DO comando [parámetros]
Este es el que teine chichita.
FOR /F ["opciones"] %variable IN (cjto archivos) DO comando [parámetros]
En este, se procesa un conjunto de archivos, de tal forma que se abre el primer archivo, se procesa, se cierra
y se pasa al siguiente archivo del cjto.
Cada archivo se procesa por lineas, es decir, que el for sera aplicado a cada una de las lineas del archivo.
el for inicia en la primera linea, y cuando acabe su proceso digamos que se "resetea" y pasa a la siguiente linea
Las lineas en blanco se saltan
Ahora, el procesamiento de cada linea se puede modificar a nuestro antojo mediante las ["opciones"], siendo estas:
EOL=c
Indica que se procesen todas las lineas del archivo menos las que empiecen por este caracter
SKIP=n
Indica el nº de linea del archivo por el que empezamos a procesarlo. es decir, si pongo skip=5, las 5 primeras lineas
del archivo no se procesaran
DELIMS=xxx
Dice donde (en que simbolos) se quedara el for en cada vuelta (dentro de una misma linea)
TOKENS=x,y,m-n
Dice cuales son las vueltas validas del for, es decir, en que vueltas del for nuestra variable tomara un valor. se pueden
poner posiciones sueltas: 2,3,4 o rangos: 1-4 o incluso los dos juntos: 1,3-5. ademas, si ponemos el *, se añade otra variable adicional
que contendra el resto de la cadena que no haya llegado a ser procesada por el FOR
USEBACKQ
Esto es para el uso de comillas, no es algo muy importante, pero puede ser util dependiendo de como se llamen los archivos
que vayamos a tratar y demas. esto mirarlo si interesa en la ayuda
Lo que viene despues en la ayuda es sobre el uso de expansion de variables, que puede ser util, pero mejor mirarlo en la ayuda
ademas, esto se puede entender mejor en la ayuda del SET
Bueno. hasta aqui es la ayuda del for de msdos explicada por mi, que posiblemente no nçkes haya servido para nada.
Vamos con unos ejemplos a ver si solucionan la cosa.
Primero explicare como funciona el FOR /F ["opciones"] .........
Pues vamos a ver, esto lo que hace es buscar en todas las filas de un archivo. Entonces, almacena en variables el trozo de cadena
que existe entre un delimitador y otro, y asi hasta el nº de tokens.
un ejemplo cutre seria, en la linea
hola buenos dias
si el delim=" " (espacio en blanco) y tokens=1,2,3. esto significa que queremos agarra 3 (1,2,3) trozos de cadena que esten uno tras
otro de forma contigua y delimitados por el espacio. asi obtendriamos 3 variables que almacenarian
i=hola
j=buenos
k=dias
Pongamos ahora un ejemplo real por si no se ha entendido.
Creamos el archivo de texto 1.txt con el siguiente contenido
----------- 1.txt
;hola buenos dias
este es un manual, dedicado al for
;para.la.gente. que.quiera.aprender
;y para los demas tambien
hasta luego
1 =Hola
2=adios
3=buenas
-----------------
vamos a realizar un primer FOR. abrimos la consola y ponemos
for /f "eol=; tokens=1 delims=," %i in (1.txt) do echo %i
Este for procesara todas las lineas menos las que empiecen por ; ya que eol=;
En cada linea que procese solo dara tantas vueltas como "," se encuentre (delims=,). y almacenara en la variable %i,
solamente la parte de la cadena que se encuentre entre el principio y la primera (tokens=1) aparicion de ","
Para las lineas que no tengan "," se considera el primer token como la linea completa, porlo que en esas lineas
en vez de pasar de ella, las tomara enteras en la variable. Asi, el resultado de este for seria:
este es el manual ---> falta lo que viene a partir de la "," porque no lo ha agarrado debido al delims
hasta luego |
1 =Hola |-->En estas, como no hay "," agarrado toda la linea
2=adios |
3=buenas |
Otro ejemplo mas claro seria:
for /f "eol=; tokens=1,2,3 delims= " %i in (1.txt) do echo %i %j %k
lo mismo daria poner la parte tokens asi:
for /f "eol=; tokens=1-3 delims= " %i in (1.txt) do echo %i %j %k
Ahora queremos agarrar de cada linea, menos de las que empiecen por ; (eol=
las cadenas que se encuentren entre
token1 --> el principio y el primer " " (delims=" ")
token2 --> el primer " " y el segundo " "
token3 --> el segundo " " y el tercer " "
y el resto lo desechariamos.
Darse cuenta de que en este caso necesitamos agarrar 3 cosas por cada linea, por lo que no nos vale solo con la variable
%i, si no que necesitaremos tambien las %j y %k. Para esto, j y k no se declaran en el for (como la %i, de hecho
unicamente se dclara la primera que se vaya a usar, puede ser %i, %a, %1 o lo que sea), si no que se ponen en el la
parte del comando a la hora de trabajar con ellas.
Tener en cuenta tambien que si declaramos la variable %i en el for todas las que usemos deben ir consecutivas en
orden alfabetico y nunca superar los 26 simbolos. seria %i %j %k %l %m....
si seleccionamos %a en el for, seria %a %b %c %d.
y siempre diferenciando entre MAY y min.
Entonces en este ejemplo nos saldria lo siguiente:
este es un
hasta luego
1 =Hola
2=adios
3=buenas
si queremos, para verlo mas claro, podemos meter algun caracter raro entre %i, %j y %k
for /f "eol=; tokens=1-3 delims= " %i in (1.txt) do echo %i ? %j ? %k
Obteniendo el siguiente resultado
este ? es ? un
hasta ? luego ?
1 ? =Hola ?
2=adios ? ?
3=buenas ? ?
Vemos como en las lineas 3 y 4 aparecen las ? al final y sin nada entre medias, esto se debe a que la variable %i
contiene 2=adios (todo hasta el final) y las variables %j y %k estan vacias
Un ultimo ejemplo para ver el uso del * seria. para ello le quitamos el ; al principio de todas las lineas que lo tuvieran:
for /f "tokens=1,2* delims= " %i in (1.txt) do echo %i ? %j ? %k
Ahora pone en las variables %i y %j:
token1 (variable %i)--> entre el principio y el primer " " (delims=" ")
token2 (variable %j)--> entre el primer " " y el segundo " "
y en la variable %k, que viene definida por el token *, se pondra el resto de la cadena
asi el resultado seria:
hola ? buenos ? dias
este ? es ? un manual, dedicado al for
para.la.gente. que.quiera.apr ender ? ?
y ? para ? los demas tambien
hasta ? luego ?
1= ? hola ?
2=adios ? ?
3=buenas ? ?
--------------------------
por ultimo les doy un ejemplo muy util cuando por ejemplo queremos buscar en un archivo de registro, un valor determinado.
imaginemos que quiero buscar en el archivo 1.reg, el valor de la clave SwapMouseButto ns. sabiendo que en el archivo
1.reg, existe una linea que pone
SwapMouseButto ns=1.
pero ademas hay muchas otras lineas similares como:
mouse=9
but=6
....
asi que si usamos el for normal sobre el archivo directamente no hay forma de sacar solo el valor que queremos
por lo que podemos hacer un find sobre el archivo que nos devuelva unicamente la linea que contiene la palabra
SwapMouseButto ns, y hacer el for sobre ella. con esto quiero decir, que ademas de sobre archivos, podemos aplicar el for
sobre comandos que actuen sobre archivos y nos den lo que queremos de ellos de una forma mas especifica.
este ejemplo seria asi:
FOR /F "tokens=1* delims==" %A IN ('FIND /I "SwapMouseButto ns" c:\1.reg') do echo %B
el resultado seria que muestra por pantalla:
1
si hubiesemos puesto ..... do echo %A
mostraria por pantalla
SwapMouseButto ns
A trabajar:
Capitulo 2: Haz un programa que al iniciarse te pida una variable ( set /p) de como te llamas , otra de tu edad y de que has comido hoy.
Una vez le hayas pedido eso que escriba en la pantalla Pues -nombre- comiendo -lo que haya comido- y teniendo en cuenta que tienes -edad- sos feo
, otro programa que te pida que nombre le quieres poner al cuadrado , pide el lado del cuadrado , calcula su area y se despide
Capitulo 3: Mejora el programa del capitulo anterior agregandole un menu en el que te de opcion a elegir que area quieres calcular la del un rectangulo o la de un cuadrado y otro programa que te pida la ruta de un archivo a buscar , compruebe si existe , en caso de que sea afirmativo diga existe o en nevativo no existe.
Va a estar dividido en capitulos que los hire poniendo cada un dia , mas o menos.
Cualquier duda o sugerencia escribanla.
Quiero decir que algunas partes las he sacado de otros manuales y hay algunas partes hechas por mi.
Capitulo 1: Introduccion y primeros comandos.
Los programas que se hacen en batch suelen tener la extension .bat de ahi su nombre es posible cambiar esta extension con programas.
Bueno para programar en bat necesitas un editor de texto plano ( recomiendo el bloc de notas ) .Utiliza como compiler el cmd.
Ni se les ocurra programar en word o wordpad ya que no se puede porque no son editores de texto plano.
En este capitulo les enseñare el funcionamiento de echo, exit, pause, rem, goto y cls.
echo
Sirve para escribir en la pantalla ( por ahora nos quedamos con eso al llegar a los redireccionamientos veremos que hace mas cosas).
Normalmente los programas empiezan por @echo off esto sirve para q no aparezca al ejecutarse las lineas del cmd ( c.\documents & settings\user.). Si no entienden algo no pasa nada , con los ejemplos se entendera.
pause
Sirve para detener el programa hasta que se pulse una tecla.
exit
Sirve para salir del programa.
Ejemplo:
En todos los lenguajes se suele empezar con este programa lo que hace es escribir en la pantalla Hola con echo ,esperar una tecla con pause y salir con exit.
Código:
@echo off
echo Hola
pause
exit
Creas un bloc de notas introducis ese codigo , luego vamos a archivo - guardar como y le ponemos el nombre que queramos , pero al final con la entencion .bat.
Si al comando pause se le añade > nul ( pause > nul) , no pone en la pantalla lo de : presione una tecla para continuar..., y se sigue ejecutando de la misma forma.
Ahora explico los comandos rem , goto y cls
rem
Este comando sirve para poner comentarios en el codigo. se podria decir que hace lo contrario que echo lo pasa por la pantalla y rem lo "esconde".
su sintaxis es la siguiente:
rem comentario
goto
Los codigos bat suelen estar divididos en partes. una parte de un bat tiene la siguiente estructura (:nombreparte). este comando lo que hace es ir a una parte ( go to= ir a ) , tranquilos si no lo entendes , pero en los ejemplos lo veras claro .Igual lo de dividir un programa en partes no se ve muy util pero cuando lleguemos al comando if sabras cual es la utilidad de dividir.
la sintaxis de goto es esta:
goto nombreparte(sin los dos puntos)
cls
Este comando sirve para borrar la pantalla.
sintaxis:
cls (se pone tal cual sin nada mas)
Ejemplo:
Código:
@echo off
:menu
rem si se fijan :menu es una parte del programa al igual que :menu2
rem con echo. dejo en blanco la lineas.
echo.
echo Hola
echo.
rem Utilizo pause > nul para que no aparezca el mensaje de pulse una tecla
rem Proba quitarlo y veras la diferencia
pause > nul
goto menu2
:menu2
cls
rem con cls borro la pantalla proba quitarlo y veras la diferencia
echo.
echo Ahora estoy en la parte :menu2
echo.
pause > nul
exit
Capitulo 2: Variables.
Bueno este capitulo hablaremos de la declaracion de variables y de los tipos, tambien hablaremos de las variables de expansion.
Como declarar un variable
Es tan sencillo como esto:
Set nombrevariable= valor
Para llamar a la variable en un lugar del programa se debe hacer de esta manera:
%nombrevariable% ( es decir, entre tantos por ciento "%")
Esta variable puede contener tanto palabras como numeros, pero no operaciones como + - / etc en el capitulo siguente explicare como hacer
operaciones con variables. en este voy a explicar como hacer para que tu programa consiga una variable por el usuario.
esto se hace de esta manera:
Set /p nombrevariable= Lo que saldra en la pantalla para que el usuario lo rellene(ejemplo Nombre: )
Ejemplo:
Código:
@echo off
Title Ejemplo
rem title sirve para cambiar el texto que aparece en la barra azul de la ventana
cls
set saludo= Hola,
set /p nombre= Como te llamas?
cls
set/p ape= Cual es tu primer apellido, %nombre%?
cls
set/p ape1= Y el segundo?
cls
echo.
echo %saludo% %nombre% %ape% %ape1%
echo.
pause
exit
Bueno empezamos con lo de las operaciones con variables:
Para hacer operaciones (suma,resta,division etc) se ace con set /a .
sintaxis
set /a VariableEnLaQu eSeGuardaraElR esultado= variable +(o cualkier otra opercion) variable2
Ejemplo
Supongamos que tengo una variable a=2 y otra b=3 y quiero sumar las 2.
el resultado de esta suma quiero q este en c.
Se haria asi:
set /a c=a+b
Tambien es posible hacerlo asi pero es perder tiempo:
set /a c=%a%+%b%
Alumno: A¿ y q pasa si pongo set c= a+b ?
yo: la variable c seria "a+b"
A. A¿ y si pongo set c= %a%+%b%?
Y. que la variable c seria "2+3"
Bien la declaracion de variables ya esta dada.
Ahora voy a acer un pequeño repaso de lo que sabemos hasta ahora ( de variables):
set variable=valor
asignar un valor a una variables nosotros en el momento de la programacion.
set /p variable=pregunta
el usuario da el valor a esta variable respondiendo a la pregunta.
set /a variable=operacion
realiza la operacion y guarda el valor en la variables.
para ver las operaciones que se pueden realizar poned en cmd "set /?" sin las comillas .
Ejemplo:
Código:
@echo off
cls
title ejemplo para hacer medias de notas
echo.
echo.
set /p a=que nota has sacado en lengua?
cls
set /p b=que nota has sacado en ingles?
cls
set /p c=que nota has sacado en mates?
cls
set /p d=que nota has sacado en historia?
cls
set asignaturas=4
set /a media=a+b+c+d
set /a media=media/asignaturas
echo.
echo Tu media es %media%
echo.
echo.
pause
exit
Capitulo 3: If
El comando if sirve para hacer algo en caso de que se cumpla una condicion impuesta a una variable.C on este comando ,por ejemplo, podemos hacer menus. Su sintaxis es esta:
If [not] condicion accion
*el not es opcional y sirve para expresar la condicion de forma negativa ( ej/ if not %var1%==1 echo mal // si var1 NO es iwal a 1 escribe mal)
Las condiciones que se suelen utilizar son :
variable==valor (para expresar si la variable es igual a valor az esto)
variable LSS valor(" " " " " es menor a valor az esto)
variable GTR valor(" " " " " es mayor a valor az esto)
variable LEQ valor(" " " " " es menor o igual az esto)
variable GEQ valor(" " " " " es mayor o igual az esto)
Ejemplo:
Código:
@echo off
title Averigua el numero
:menu
cls
set /p var1=pon un numero:
If %var1%==8 goto bien
If %var1% LSS 8 goto menor
If %Var1% GTR 8 goto mayor
:bien
cls
echo Muy bien, has acertado!!!
pause
goto end
:menor
cls
echo el numero que has puesto es menor
echo sigue probando
pause
goto menu
:mayor
echo el numero que has puesto es mayor
echo sigue probando
pause
goto menu
:end
echo adios
pause
exit
Como dije el if vale para hacer algo segun condiciones que pongamos. pero que pasa si las condiciones que ponemos no se cumplen?
simplemente ( al ser un lenguaje lineal) pasa a la linea siguiente. Hacer esto da muchos errores:
Código:
if %var%==1 goto xx
if %var%==2 goto xy
if %var%==3 goto zz
etc
por que da errores??
por que si el usuario se confunde y pulsa 4. Proba a ver que pasa.
hace lo que quiere.
MUy bien y como se resuelve? pues con un comando muy sencillo llamado else y unos paretesis.
la sintaxis seria esta
IF condiciones (accion1*) ELSE accion2
explicacion //SI las condiciones son verdaderas haz accion1 SINO haz accion2
*la accion1 ha de ir obligartoriame entre parentesis
Ejemplo:
Código:
if %var%==1 (goto xx) else goto comp
:comp
if %var%==2 (goto xy) else goto comp2
:comp2
if %var%==3 (goto zz) else echo el numero pulsado es incorrecto && pause && goto menu
ahora diras , que es &&??
sirve para "decir al programa" haz esto (y) estor (y) esto.
el nexo conpulativo y se sutituye en nuestro programa por &&.
bien ahora imaginemos que queremos que el programa haga algo si existe tal archivo.
Pues bien esto se ace con IF EXIST.
su sintaxis:
IF EXIST rutaarchivo accion
por supuestro se puede combinar con else:
IF EXIST rutaarchivo (accion1) ELSE accion2
Ejemplo:
Código:
If exist c:\Hola.txt (goto si) else goto no
:si
cls
echo Existe
pause
exit
:no
cls
echo No existe
pause
exit
Capitulo 4: Redirecionamientos.
Vamos a ver, imaginemos que queremos hacer un programa que guarde cierta informacion en un archivo. ese archivo se va a llamar ola.txt.
bien para guardar informacion en un archivo se hace con los redireccionamientos (echo ..... >> archivo....).
Ejemplo:
Código:
@echo off
echo.
echo se a copiado
echo.
pause
exit
Se haria asi:
Código:
echo @echo off > c:\ola.txt
echo echo. >> c:\ola.txt
echo echo se a copiado >> c:\ola.txt
echo echo. >> c:\ola.txt
echo pause >> c:\ola.txt
echo exit >> c:\ola.txt
que diferencia hay entre > y >>?
> = borra lo que aya en el archivo y escribe ( es decir sobreescribe )
por ejemplo:
echo echo ola > c:\ola.txt
borra todo lo que hay en ola.txt y luego escribe echo ola
>> = escribe respetando el texto anterior
por ejemplo
echo exit >> c:\ola.txt
quedaria asi:
echo ola( respeta lo que hay)
exit
Ejemplo que mas o menos resume bastante:
Código:
@echo off
title Creador de programa para medir areas
:menu
cls
echo.
echo 1.Area cuadrado
echo 2.Area rectangulo
echo 3.salir
set /p opc=Que quieres hacer??
if %opc%==1 goto cua
if %opc%==2 goto rec
if %opc%==3 (goto end) else echo No se reconoce la tecla pulsada && pause > nul && goto menu
:cua
echo @echo off > c:\cuadrado.bat
echo set /p a=Lado cuadrado: >> c:\cuadrado.bat
echo cls >> c:\cuadrado.bat
echo echo. >> c:\cuadrado.bat
echo set /a are=a*a >> c:\cuadrado.bat
echo echo El area del cuadrado es %%are%% >> c:\cuadrado.bat
echo pause >> c:\cuadrado.bat
echo goto end >> c:\cuadrado.bat
echo El programa se encuentra en c:\
pause
goto menu
:rec
echo @echo off > c:\rectangulo.bat
echo set /p b=base crectangulo: >> c:\rectangulo.bat
echo cls >> c:\rectangulo.bat
echo set /p h=Altura rectangulo: >> c:\rectangulo.bat
echo cls >> c:\rectangulo.bat
echo echo. >> c:\rectangulo.bat
echo set /a bas=b*h >> c:\rectangulo.bat
echo echo El area del rectangulo es %%bas%% >> c:\rectangulo.bat
echo pause >> c:\rectangulo.bat
echo goto end >> c:\rectangulo.bat
echo El programa se encuentra en c:\
pause
goto menu
:end
cls
echo.
echo Hasta la proxima
pause
exit
Capitulo 5: Comando For.
Commando FOR
SINTAXIS:
FOR %variable IN (cjto) DO comando
donde:
%variable: es la variable que va a tomar el valor correspondiente en cada iteraccion del for siendo de una unica letra, distinguiendo entre MAY y min (o numero)
cjto: un cjto de ficheros
comando: lo que queremos hacer en cada vuelta del for
Observaciones:
Dentro de un bat, se debe usar %%variable (no %variable), esto se debe a que como he dicho antes,
%variable puede tomar un numero, por lo que se podria confudir con los parametros del bat, si solo
se pusiese un %
PARAMETROS:
FOR /D %variable IN (conjunto) comando DO [parámetros]
se usa cuando las extensiones de comandos estan habilitadas
FOR /R [[unidad:]ruta] %variable IN (set) DO comando [parámetros]
Cuando usamos comodines, para ejecutar el for recursivamente dentro de un directorio especificado
(unidad:ruta) en los archivos especificados por los comodines
FOR /L %variable IN (ini,paso,fin) DO comando [parámetros]
Este es el típico FOR de toda la vida. supongo ini=0 paso=1 y fin=4, se crearia la sucesion 0,1,2,3,4,5
FOR /F ["opciones"] %variable IN (cjto archivos) DO comando [parámetros]
Este es el que teine chichita.
FOR /F ["opciones"] %variable IN (cjto archivos) DO comando [parámetros]
En este, se procesa un conjunto de archivos, de tal forma que se abre el primer archivo, se procesa, se cierra
y se pasa al siguiente archivo del cjto.
Cada archivo se procesa por lineas, es decir, que el for sera aplicado a cada una de las lineas del archivo.
el for inicia en la primera linea, y cuando acabe su proceso digamos que se "resetea" y pasa a la siguiente linea
Las lineas en blanco se saltan
Ahora, el procesamiento de cada linea se puede modificar a nuestro antojo mediante las ["opciones"], siendo estas:
EOL=c
Indica que se procesen todas las lineas del archivo menos las que empiecen por este caracter
SKIP=n
Indica el nº de linea del archivo por el que empezamos a procesarlo. es decir, si pongo skip=5, las 5 primeras lineas
del archivo no se procesaran
DELIMS=xxx
Dice donde (en que simbolos) se quedara el for en cada vuelta (dentro de una misma linea)
TOKENS=x,y,m-n
Dice cuales son las vueltas validas del for, es decir, en que vueltas del for nuestra variable tomara un valor. se pueden
poner posiciones sueltas: 2,3,4 o rangos: 1-4 o incluso los dos juntos: 1,3-5. ademas, si ponemos el *, se añade otra variable adicional
que contendra el resto de la cadena que no haya llegado a ser procesada por el FOR
USEBACKQ
Esto es para el uso de comillas, no es algo muy importante, pero puede ser util dependiendo de como se llamen los archivos
que vayamos a tratar y demas. esto mirarlo si interesa en la ayuda
Lo que viene despues en la ayuda es sobre el uso de expansion de variables, que puede ser util, pero mejor mirarlo en la ayuda
ademas, esto se puede entender mejor en la ayuda del SET
Bueno. hasta aqui es la ayuda del for de msdos explicada por mi, que posiblemente no nçkes haya servido para nada.
Vamos con unos ejemplos a ver si solucionan la cosa.
Primero explicare como funciona el FOR /F ["opciones"] .........
Pues vamos a ver, esto lo que hace es buscar en todas las filas de un archivo. Entonces, almacena en variables el trozo de cadena
que existe entre un delimitador y otro, y asi hasta el nº de tokens.
un ejemplo cutre seria, en la linea
hola buenos dias
si el delim=" " (espacio en blanco) y tokens=1,2,3. esto significa que queremos agarra 3 (1,2,3) trozos de cadena que esten uno tras
otro de forma contigua y delimitados por el espacio. asi obtendriamos 3 variables que almacenarian
i=hola
j=buenos
k=dias
Pongamos ahora un ejemplo real por si no se ha entendido.
Creamos el archivo de texto 1.txt con el siguiente contenido
----------- 1.txt
;hola buenos dias
este es un manual, dedicado al for
;para.la.gente. que.quiera.aprender
;y para los demas tambien
hasta luego
1 =Hola
2=adios
3=buenas
-----------------
vamos a realizar un primer FOR. abrimos la consola y ponemos
for /f "eol=; tokens=1 delims=," %i in (1.txt) do echo %i
Este for procesara todas las lineas menos las que empiecen por ; ya que eol=;
En cada linea que procese solo dara tantas vueltas como "," se encuentre (delims=,). y almacenara en la variable %i,
solamente la parte de la cadena que se encuentre entre el principio y la primera (tokens=1) aparicion de ","
Para las lineas que no tengan "," se considera el primer token como la linea completa, porlo que en esas lineas
en vez de pasar de ella, las tomara enteras en la variable. Asi, el resultado de este for seria:
este es el manual ---> falta lo que viene a partir de la "," porque no lo ha agarrado debido al delims
hasta luego |
1 =Hola |-->En estas, como no hay "," agarrado toda la linea
2=adios |
3=buenas |
Otro ejemplo mas claro seria:
for /f "eol=; tokens=1,2,3 delims= " %i in (1.txt) do echo %i %j %k
lo mismo daria poner la parte tokens asi:
for /f "eol=; tokens=1-3 delims= " %i in (1.txt) do echo %i %j %k
Ahora queremos agarrar de cada linea, menos de las que empiecen por ; (eol=
token1 --> el principio y el primer " " (delims=" ")
token2 --> el primer " " y el segundo " "
token3 --> el segundo " " y el tercer " "
y el resto lo desechariamos.
Darse cuenta de que en este caso necesitamos agarrar 3 cosas por cada linea, por lo que no nos vale solo con la variable
%i, si no que necesitaremos tambien las %j y %k. Para esto, j y k no se declaran en el for (como la %i, de hecho
unicamente se dclara la primera que se vaya a usar, puede ser %i, %a, %1 o lo que sea), si no que se ponen en el la
parte del comando a la hora de trabajar con ellas.
Tener en cuenta tambien que si declaramos la variable %i en el for todas las que usemos deben ir consecutivas en
orden alfabetico y nunca superar los 26 simbolos. seria %i %j %k %l %m....
si seleccionamos %a en el for, seria %a %b %c %d.
y siempre diferenciando entre MAY y min.
Entonces en este ejemplo nos saldria lo siguiente:
este es un
hasta luego
1 =Hola
2=adios
3=buenas
si queremos, para verlo mas claro, podemos meter algun caracter raro entre %i, %j y %k
for /f "eol=; tokens=1-3 delims= " %i in (1.txt) do echo %i ? %j ? %k
Obteniendo el siguiente resultado
este ? es ? un
hasta ? luego ?
1 ? =Hola ?
2=adios ? ?
3=buenas ? ?
Vemos como en las lineas 3 y 4 aparecen las ? al final y sin nada entre medias, esto se debe a que la variable %i
contiene 2=adios (todo hasta el final) y las variables %j y %k estan vacias
Un ultimo ejemplo para ver el uso del * seria. para ello le quitamos el ; al principio de todas las lineas que lo tuvieran:
for /f "tokens=1,2* delims= " %i in (1.txt) do echo %i ? %j ? %k
Ahora pone en las variables %i y %j:
token1 (variable %i)--> entre el principio y el primer " " (delims=" ")
token2 (variable %j)--> entre el primer " " y el segundo " "
y en la variable %k, que viene definida por el token *, se pondra el resto de la cadena
asi el resultado seria:
hola ? buenos ? dias
este ? es ? un manual, dedicado al for
para.la.gente. que.quiera.apr ender ? ?
y ? para ? los demas tambien
hasta ? luego ?
1= ? hola ?
2=adios ? ?
3=buenas ? ?
--------------------------
por ultimo les doy un ejemplo muy util cuando por ejemplo queremos buscar en un archivo de registro, un valor determinado.
imaginemos que quiero buscar en el archivo 1.reg, el valor de la clave SwapMouseButto ns. sabiendo que en el archivo
1.reg, existe una linea que pone
SwapMouseButto ns=1.
pero ademas hay muchas otras lineas similares como:
mouse=9
but=6
....
asi que si usamos el for normal sobre el archivo directamente no hay forma de sacar solo el valor que queremos
por lo que podemos hacer un find sobre el archivo que nos devuelva unicamente la linea que contiene la palabra
SwapMouseButto ns, y hacer el for sobre ella. con esto quiero decir, que ademas de sobre archivos, podemos aplicar el for
sobre comandos que actuen sobre archivos y nos den lo que queremos de ellos de una forma mas especifica.
este ejemplo seria asi:
FOR /F "tokens=1* delims==" %A IN ('FIND /I "SwapMouseButto ns" c:\1.reg') do echo %B
el resultado seria que muestra por pantalla:
1
si hubiesemos puesto ..... do echo %A
mostraria por pantalla
SwapMouseButto ns
A trabajar:
Capitulo 2: Haz un programa que al iniciarse te pida una variable ( set /p) de como te llamas , otra de tu edad y de que has comido hoy.
Una vez le hayas pedido eso que escriba en la pantalla Pues -nombre- comiendo -lo que haya comido- y teniendo en cuenta que tienes -edad- sos feo

Capitulo 3: Mejora el programa del capitulo anterior agregandole un menu en el que te de opcion a elegir que area quieres calcular la del un rectangulo o la de un cuadrado y otro programa que te pida la ruta de un archivo a buscar , compruebe si existe , en caso de que sea afirmativo diga existe o en nevativo no existe.