Está en la página 1de 10

Karma: +2/-0

Desconectado

Sexo:
Mensajes: 99

.. Quality Not Quantity ..

Programar en bat desde 0


« en: 12 de Agosto de 2008, 12:51:38 » Citar

Salu2 a todos!. En este tuto les hablaré de los archivos batch vulgarmente conocidos como
"bacheros".
OJO: Este es un manual de introduccion y no un manual para expertos.

Nota: He visto muchas webs en las que tambien tratan este tema, todas iguales. Hasta los
errores han sido copiados entre ellas mismas. Las sintaxis malas, y los codigos ejemplos
muchos de ellos no funcionan. Es por esa razon de esta aclaracion ya que TODOS los
ejemplos que pongo aqui funcionan perfectamente, han sido creados desde 0 y probados, de
lo contrario no lo pondria. Es todo.

Ante todo debemos saber algo elemental: xD

¿Archivos Batch?

Un archivo batch (o bat) es un archivo de procesamiento por lotes: se trata de archivos de


texto sin formato (texto plano), con extensión .bat que contienen un conjunto de comandos
DOS. No necesitan un compilador. Cuando se ejecuta este archivo, los comandos
contenidos son ejecutados en grupo, de forma secuencial, desde arriba hasta abajo. =D

Cualquier comando DOS puede ser utilizado dentro de un archivo batch.

Obs: Windows 2K/XP se puede utilizar tambien la extensión .cmd

¿Que programas puedo hacer en bat?

-Calcular edad, horoscopo


-Programar apago a cierta hora del pC
-Instalar un programa de forma automatica cierto dia, desde cierta ubicacion de red
-Agregar entradas al registro
-Eliminar archivos/virus desde tu memoria antes que se ejecuten
-Cambiar el tapiz de windows, Agregar impresoras, formatear el disco, en fin... todo loq ue
te imagines posible.

Un ejemplo muy básico:

Abrimos el Bloq de Notas escribimos lo siguiente y guardamos el archivo con extension


bat.

Código:
@echo off
echo Programar en Bat desde 0
pause
exit

Aqui es donde explico lo que sucedio en el sencillo ejemplo anterior:

@echo off --> se establece al echo como off para que no muestre los comandos en pantalla
echo Programar en Bat desde 0 --> me muestra el mensaje en pantalla (lo que sea)
pause --> el programa se detiene en esa linea y pide una confirmacion para continuar
exit --> luego de confirmar, el programa finaliza.

Bueno ahora q ya sabemos lo necesario, empezare a definir algunas cosillas:

I COMANDOS BASICOS

@echo off
Si ponemos esta linea al inicio de nuestros programas evitaremos que se visualizen los
comandos que vienen a continuacion. Aún si no lo ponemos, nuestro programa funcionara

Tomando como referencia el primer ejemplo, si no ponemos este comando sucedería lo


siguiente: (las letras de colores las puse yo en paint )

title
Establece el titulo a la ventana de nuestro programa
Código:
title Mi Programa en Bat x 0zK4Rr

color
Con este comando podemos establecer el color de la ventana de nuestro programa.
Código:
color 5E
Donde:
5 --> indica el color de la ventana
E --> indica el color de las letras

Codigo de colores:
0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Púrpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro
A = Verde claro
B = Aguamarina claro
C = Rojo claro
D = Púrpura claro
E = Amarillo claro
F = Blanco brillante

echo
Muestra un mensaje (cadena) en pantalla
Código:
echo Mi Primer Programa en Bat

echo.
Sirve para insertar una linea vacia al programa (salto de línea)
Código:
echo Mi Primer Programa en Bat
echo.
echo DragonJar.us

rem
Para explicar los codigos. O tambien utilizado para poner comentarios. No se muestra en
pantalla, solo en el modo de edición.
Código:
echo Mi Primer Programa en Bat
rem se ha mostrado un mensaje
echo.
rem he insertado una linea vacia
echo DragonJar.us
rem he mostrado un segundo mensaje

Como verás en el resultado no se muestran las lineas con el comando rem.


pause
Sirve para hacer una pausa en el programa. Para continuar la ejecucion del resto del
programa es necesaria una confirmacion (Presione una tecla para continuar . . .)

exit
Ya se imaginarán; con este comando forzamos la finalizacion del programa, sin importar el
codigo restante.

cls
Sirve para limpiar, quitar el contenido de la pantalla de nuestro programa; como si el
programa recien empeza (la pantalla limpia). Donde pongas este comando, limpiará el
resultado del codigo ejecutado anteriormente (no afecta al codigo que viene en las lineas
siguientes).

Código:
@echo off
echo.
echo Hola
echo.
echo Este es un mensaje
echo.
echo que sera borrado
echo.
echo con el comando cls
echo.
pause
cls
echo Este es otro mensaje
echo.
pause
exit

II VARIABLES

Ya conociendo el uso de los principales comandos, avancemos un poco y veamos el uso de


variables.
Una variable es un espacio de memoria en la que podemos almacenar datos y/o comandos
que nos seran de utilidad a lo largo del programa.

Debemos considerar 2 detalles necesarios en el tema de variables:


1.- Nombre: Cada variable es representada por un nombre, el cual haremos referencia
cuando necesitemos utilizar el contenido de dicha variable.
2.- Valor o Contenido: (nahh q decir)

set
Se utiliza este comando para crear una variable cualquiera
Código:
set minombre=Yesik
Donde:
minombre es el nombre de la variable (puede cualquier otro nombre q creas conveniente)
Yesik es contenido de la variable creada

Nota: Para hacer referencia a cualquier variable y/o utilizar su contenido, hay q llamarlas
asi:

%variable%

Si desearamos mostrar en pantalla utilizamos el comando echo (ver el sgte ejemplo)

Veamos un ejemplo con este comando:


Código:
@echo off
echo.
set saludo=Hola
set nombre=Yesik
echo %saludo% %nombre%
pause

Hasta ahora todo bien creando y utilizando las variables. Pero, ¿que pasa si el valor de la
variable no conocemos? (por ejm la fecha de nacimiento, para calcular su edad, horoscopo,
etc). Entonces tiene que ser el mismo usuario quien indique el valor de la variable para
luego el programa hacer los calculos necesarios.

set /p
Mediante este comando, nuestro programa creará una variable y a su vez nos pedirá que
ingresemos su valor respectivo. (Que bonito!)
Código:
@echo off
set /p nombre=Escribe tu nombre:
set /p apellido=Escribe tu apellido:
set /p pais=Escribe tu pais:
echo.
echo.
echo Te llamas %nombre% %apellido% y eres de %pais%
pause
exit

Hasta ahora hemos tratado a las variables con textos (para los que ya conocen un poco, con
cadenas). No podemos utilizar esos valores para hacer operaciones. Un ejm:
Código:
@echo off
set /p nota1=Escribe tu nota1:
set /p nota2=Escribe tu nota2:
set promedio=(%nota1%+%nota2%)/2
echo.
echo.
echo Tu promedio es: %promedio%
pause
exit

Si se fijan, nuestro programa no es capaz de operar, sólo muestra lo que escribimos (joeR!).
Necesitamos hacer algo. Veamos el siguiente codigo.

set /a
Como ya se imaginarán este comando podemos crear y realizar calculos (operaciones
matematicas) con dichas variables.
Mejorando el codigo anterior, tendremos lo siguiente:
Código:
@echo off
set /p nota1=Escribe tu nota1:
set /p nota2=Escribe tu nota2:
set /a promedio=(%nota1%+%nota2%)/2
echo.
echo.
echo Tu promedio es: %promedio%
pause
exit

III CONDICIONALES

Podemos traducirlo de la siguiente manera: "Si sucede esto, has esto"; o tambien: "Si pasa
esto, has esto, y si no, haz esto otro". Veamos un ejemplo:
Código:
@echo off
set /p nota1=Escribe tu nota1:
set /p nota2=Escribe tu nota2:
set /a promedio=(%nota1%+%nota2%)/2
echo.
if %promedio% LEQ 10 (echo Estas desaprobado) else (echo Aprobaste el
Curso)
pause
exit

El Programa funciona de la siguiente manera:


creamos las variables nota1 y nota2 y asu vez le pedimos al usuario que ingrese sus valores.
Calculamos el promedio de notas. Utilizamos el condicional IF en la que validamos el
promedio: "Si el promedio calculado es menor o igual que 10, muestra el mensaje Estas
Desaprobado. Si no, muestra el mensaje Aprobaste el curso". Facil nO!?

Detalle:

En el ejemplo utilice LEQ para hacer la comparacion (si es menor o gual). Podemos
reemplazar ese LEQ y usar cualquiera de estas otras (de acuerdo a nuestras necesidades):

== Si son iguales --> "Si el promedio es igual a 10..."


LSS Si es menor --> "Si el promedio es menor a 10..."
GTR Si es mayor --> "Si el promedio es mayor a 10..."
LEQ Si es menor o igual --> "Si el promedio es menor o igual a 10..."
GTR Si es mayor o igual --> "Si el promedio es mayor o igual a 10..."

El uso de condicionales lo podemos apreciar aun mas en el tratamiento de menus.

IV MENUS (ETIQUETAS)

La verdad no se como definirlo, lo explicare con un example xD:


Código:
@echo off
set /P usuario=Ingrese su nombre de Usuario:
if %usuario%==admin (goto sistema) else (goto error)

:error
cls
echo Acceso denegado
echo Lo sentimos, usted no esta autorizado a ingresar al sistema
pause
exit
:sistema
cls
echo.
echo ..::[Bienvenido al Sistema]::..
pause
exit

Como explique inicialmente, Batch es un lenguaje secuencial. Se ejecutan las lineas una a
una, de arriba a abajo. En nuestro ejemplo al iniciar el programa nos solicita el ingreso del
nombre de usuario. A continuacion verifica si el usuario es "admin". De ser cierto, el
programa dara un salto a la etiqueta ":sistema" En caso contrario, hara el salto a la etiqueta
":error"

Cabe mencionar que el codigo que contenga cada etiqueta se ejecutara "sólo" cuando se
haga referencia a dicha etiqueta. Osea el programa nunca ejecutara el codigo que hay
dentro de la etiqueta :sistema si es que nunca ha sido llamada (goto sistema).

Ya se habran dado cuenta de algo: nuestro programa se va cerrar cuando ingresemos un


usuario incorrecto (linea 10) O sea solo valida una vez y luego nos bota.

Modificado algunas lineas de nuestro programa tendremos:


Código:
:login
@echo off
set /P usuario=Ingrese su nombre de Usuario:
if %usuario%==admin (goto sistema) else (goto error)

:error
echo Usuario incorrecto. Intente de nuevo
echo.
echo.
goto login

:sistema
echo.
echo ..::[Bienvenido al Sistema]::..
pause
exit

Ahora si! xD Agrege una etiqueta al inicio (:login) De esta manera al ingresar un usuario
incorrecto, muestra un mensaje de error y nos devuelve a la etiqueta :login en donde nos
pide ingresar un usuario. Osea el programa regresara siempre a pedirnos el usuario hasta
que ingresemos el usuario correcto.

V VARIOS

Bueno x hoy ya esta bueno. Aqui pongo algunos comandos basicos para utilizar en nuestros
archivos Bat.

del
Para eliminar archivos. Solo especificas la ruta del archivo y ya! (Nota: no va a la papelera
omG!)
Código:
@echo off
del C:\prueba.txt

A este comando podemos indicarle algunos parametros que pueden mejorar nuestra tarea:

/p
Si le agregamos este comando nos pedira confirmacion antes de eliminar (Si no se pone el
archivo es eliminado sin confirmacion)
Código:
@echo off
del /p C:\prueba.txt

/f
Elimina archivos a la fuerza, incluyendo aquellos que estan en "Solo lectura". Si no
ponemos este parametro y tratamos de eliminar un archivo protegido nos devolvera
"Acceso Denegado"
Código:
@echo off
del /f C:\prueba.txt

/s
Limpia las carpetas. Elimina todos los "archivos" que existan dentro de dicha carpeta y
ademas de las subcarpetas existentes. Pide confirmacion de eliminacion.
Código:
@echo off
del /s C:\prueba
pause

/q
Elimina archivos de forma silencionsa, no pide confirmacion ni nada.

Podemos combinar este ultimo parametro con el anterior, de esta forma vaciaria la carpetay
subcarpetas sin pedirnos confirmacion:
Código:
@echo off
del /q /s C:\prueba
pause

start
Abre un archivo, programa pagina web, etc.
Código:
@echo off
start C:\archivo.doc
start mspaint
start http://www.google.com.pe

taskkill
Para matar, terminar un proceso.
Código:
@echo off
taskkill -im mspaint.exe
taskkill -im winword.exe
taskkill -im iexplore.exe

Obs: Si tratamos de matar al proceso winword (Microsoft Word) pero tenemos abierto un
documento que aun no hemos guardado. Nos saldrá una ventana que nos preguntara si
deseamos guardar el archivo.

Podemos agregar el parametro -f para forzar el cierre de la aplicacion sin pedir


confirmacion. (los cambios en el archivo se pierden)
Código:
taskkill -im winword.exe -f

Despedida:

Trate de ser muy especifica en algunos detalles, (programadores avanzados, perdónenme).

Programando en bat existe muchisimas posibilidades. Yo solo he demostrado un minimo %


De ustedes depende si quieren otro tuto = (Parte II), con gusto lo haré, hay mucho
pendiente por hacer.
Me gustaria tambien q no solo lean/vean/copien/peguen, sino investiguen, y pongan sus
nuevas ideas aqui.

También podría gustarte