Curso de Batch - Lenguaje .bat

parte 1
Bueno, pues voy a empezar por aquí. Un archivo batch (o bat) es un archivo de procesamiento por lotes: se trata de archivos de texto sin formato, guardados con la extensión *.bat que contienen un conjunto de comandos DOS.
Cuando se ejecuta este archivo bat, los comandos contenidos son ejecutados en grupo, de forma secuencial, permitiendo automatizar diversas tareas.

Cualquier comando DOS puede ser utilizado en un archivo batch.

Para que os vayais familiarizando con batch y sus codigos, podeis iros a Inicio>Accesorios>Simbolo de Sistema (los que tengáis windows, los que no usad un emulador o algo por el estilo) y ahí escribis "help". Esos son todos los comandos que puedes escribir con bat. (ademas de esos estan las modificaciones, los atributos a estos, las expresiones alternativas... etc.

Nosotros vamos a programar en un bloc de notas, a palo seco. Para guardarlo simplemente le ponemos como nombre "nombredelarchivo.bat"
quitandole el .txt. Para abrilo nos vamos al bloc de notas y le damos a Abrir. Dentro de la pantallita de abrir, en Tipo, seleccionamos "Todos los archivo", pinchamos en el documento y se abre, o simplemente le damos click derecho al documento>Editar.

Bien, pues vamos con nuestro primer código, este es el tipo de códig que genera un Hola Mundo.

Código:

@echo off
echo Hola Mundo!
pause
exit


Bien, voy a ir explicando. El @echo off sirve para quitar el eco del programa. Si no sabeis lo que es el eco, probad a poner @echo on.
El echo sirve para escribir cosas en la pantalla.
El pause inserta una pausa que continua al pulsar una tecla.
El exit nos hace salir del programa.

Ahora voy a explicar un par de modificaciones.
Cuando insertamos un pause, sale: "pulse una tecla para continuar . . . "
Imaginemonos que por un casual necesitamos poner en vez de eso, " pulse una tecla para acceder al menu" o "pulse una tecla para salir".
¿Cómo lo haríamos? Pues bien, se hace con "pause>nul". Con pause>nul
lo que hacemos es insertar una pausa pero sin que salga nada en la pantalla, con lo que podriamos poner un echo antes para que pareciese que hay un comando para acceder al menu, otro para salir, otro para cotinuar... ect:

Código:

@echo off
echo Hola Mundo!
echo Pulse una tecla para salir
pause>nul
exit


Otro comando importante puede ser el "echo." Con el echo. podemos insertar una linea e blanco en nuestra pantalla:

Código:

@echo off
echo.
echo.
echo Hola Mundo!
echo.
echo Pulse una tecla para salir
pause>nul
exit


El ultimo (o eso creo) de los codes que os voy a enseñar hoy es el "cls". Con el cls borramos todo lo que haya ahora mismo en la patalla.

Código:

@echo off
echo.
echo.
echo Hola Mundo!
echo.
pause
cls
echo.
echo Pulse una tecla para salir
pause>nul
exit


parte 2


Bien, hoy vamos a trabajar con variables, if y goto.

Las variables son valores que toma batch que pueden cambiar en cualquier momento. En batch, una variable se crea de la siguiente forma:
(Hay que tener en cuenta que de nombrevariable al "=" no hay ningun espacio, si lo pusiésemos nos daría un error.)

Código:

@echo off
set nombrevariable= valorvariable
exit


Para llamar a una variable, se hace poniendo la variable entre signos de %. Así:

Código:

@echo off
set var1= Hola, me llamo pepito
echo.
echo %var1%
echo.
pause
exit


Para que el usuario defina una variable, se usa el comando set/p. De la siguiente forma: set/p nombredelavariable=Pregunta para el usuario cuya respuesta sera el valor de la variable.
Ejemplo:

Código:

@echo off
echo.
set/p edad=Escribe aqui tu edad:
echo.
cls
echo.
set/p nombre=Escribe aqui tu nombre:
echo.
cls
echo.
echo Hola %nombre%, segun los datos de antes tienes %edad% años.
echo.
pause
exit


Para sumar/restar..ect dos variables, se hace de la siguiente forma:
set/a nombrevar=varA + varB
set/a nombrevar=varA - varB
set/a nombrevar=varA * varB
set/a nombrevar=varA / varB

Por ejemplo:

Código:

@echo off
echo.
set/p num1=Dime el primer numero que deseas sumar:
echo.
set/p num2=Dime el segundo numero que deseas sumar:
echo.
cls
set/a resultado= num1 + num2
echo.
echo.
echo %num1%
echo + %num2%
echo ______________
echo %resultado%
echo.
echo.
echo pulsa una tecla para salir
pause>nul
exit


Bien, una vez que hallais comprendido esto, vamos con el goto. El goto es
un comando que nos lleva a un punto "de control" que definimos asi:

":nombrepunto"

Para ir a "nombrepunto" escribiriamos "goto nombrepunto".

Por ejemplo:

Código:

@echo off
:inicio
cls
echo.
echo Hola, este es un programita cachondo.
echo.
pause
cls
echo.
set/p nombre=Cual es tu nombre?
cls
echo.
echo Hola, te llamas %nombre%
echo.
echo Pulsa una tecla para volver al principio.
echo Para cerrar, pulsa la "x" de la esquina superior derecha.
echo.
pause>nul
goto inicio

ahora que sabemos como se usa goto, vamos a usar if para crear menus y para que una respuesta tenga varias opciones.
If es un comando o una sentencia para decir que:

Si esto es = a esto otro, hago esto, si no, hago esto otro.

Se expresa asi:

If [not] var1 (condicion) var2/numero/cadena accion (2accion)


[not] y son opcionales, not sirve para decir:
si var1 no es = a var2, hago esto
(condicion) es la condicion que tu le pones, las mas usadas son:

variable==valor (para expresar si variable es igual a valor haz esto)
variable LSS valor (para expresar si variable es menor a valor haz esto)
variable GTR valor (para expresar si variable es mayor a valor haz esto)
variable LEQ valor (para expresar si variable es menor o = haz esto)
variable GEQ valor (para expresar si variable es mayor o = haz esto)

(acción) aquí van las acciones que hará el programa si se cumple la condición.
Ej: " if valor1==valor2 goto inicio "
Para escribir mas de una accion se usa "&&"
Ej: " if valor1==valor2 goto inicio && set var5= 19 "

[else (2accion)] sirve para decir que en el caso contrario de que esto no se haga, que haga la segunda accion (2accion). Cuando se usa else la accion1 va entre "()".
Ej: " if valor1==valor2 (goto inicio && set var19=123) else goto fin &&echo. && echo es el fin, pulsa una tecla para salir. && pause>nul&&exit

Bien, con este code podriamos hacer un programita como este:

Código:

@echo off
:inicio
echo.
echo Hola, estas en una interfaz de user no muy interactiva.
echo.
pause
cls
echo.
set/p nom= Primero dime como te llamas:
echo.
echo Hola %nom%. Pulsa una tecla para acceder al menu.
echo.
pause>nul
cls
:menu
echo.
echo Hola estas en el menu.
echo.
set/p deseo=Escribe lo que deseas %nom% ("ayuda" para ver la ayuda):
if %deseo%==ayuda goto ayuda
if %deseo%==calculadora goto calculadora
if %deseo%==reiniciar goto inicio
if %deseo%==salir (goto salir) else echo. && echo mal && goto menu
:ayuda
echo.
echo hola estas en la ayuda.
echo.
echo Bien esto es lo que debes escribir para moverte por aqui:
echo "calculadora" sumar o restar un numero
echo "reiniciar" reiniciar el programa
echo "salir" salir del programa
echo.
echo Pulsa una tecla para ir al menu
pause>nul
goto menu
:calculadora
echo.
echo Escribe "sumar" para sumar, "restar" para restar y "menu" pra menu
echo.
set/p destino2=Que quieres hacer %nombre%?:
if %destino2%==sumar goto sumar
if %destino2%==restar goto restar
if %destino2%==menu (goto menu) else echo. && echo Escribe bien && goto calculadora
:sumar
echo.
set/p num1=Dime el primer numero que deseas sumar:
echo.
set/p num2=Dime el segundo numero que deseas sumar:
echo.
cls
set/a resultado= num1 + num2
echo.
echo.
echo %num1%
echo + %num2%
echo ______________
echo %resultado%
echo.
echo.
echo pulsa una tecla para ir de nuevo a la calculdora.
pause>nul
goto calculadora
:restar
echo.
set/p num1=Dime el minuendo:
echo.
set/p num2=Dime el sustraendo:
echo.
cls
set/a resultado= num1 - num2
echo.
echo.
echo %num1%
echo - %num2%
echo ______________
echo %resultado%
echo.
echo.
echo pulsa una tecla para ir a la calculadora
pause>nul
goto calculadora
:salir
cls
echo.
echo gracias por usar mi programa
echo.
echo pulsa una tecla para salir
pause>nul
exit

parte 3

En este capitulo aprenderemos cosas como los comandos start, los redireccionamientos, el call y el cd.

1. Title

Por si se me olvido, el comando title sirve para ponerle nombre a nuestra ventana:

Código:

@echo off
title Titulo de mi ventana
echo.
echo Esto es un bat con nombre en la barrita azul
echo.
pause
exit


2.Start

Sirve para llamar programas desde el bat actual. Se abren evidentemente en una ventana nueva, y no tienen nada que ver con el bat primero. Podemos abrir desde un .txt asta una base de datos (siempre que tengamos el programa correspondiente para abrirlo)

Código:

@echo off
echo.
echo Esto te abre la cmd y se cierra
echo.
pause
start %systemroot%\system32\cmd.exe
exit


3.Redireccionamientos

Los redireccionamientos son lo mas usado. Sirven para crear archivos de cualquier tipo con informacion que nosotros queramos.

Se usa > para borrar todo lo que hay en el archivo y escribir (si no existe tal archivo, bat lo crea.

Se usan >> para escribir a continuacion de lo que ya hay escrito en un archivo.

Para indicar que se manda al archivo, se suele usar "echo". Si no quieres que pase informacion por la pantalla, usa >nul:

echo Esto se va a archivo.txt sin salir por la pantalla >nul >archivo.txt

Código:

@echo off
echo.
echo Pulsa una tecla y se creara un archivo en el mismo directorio
echo que este con el nombre archivo.txt y contendra el texto
echo Hola mundo y Adios mundo
pause>nul
echo Hola mundo >nul >archivo.txt
echo Adios mundo >nul >>archivo.txt
echo.
echo Archivo creado.
pause
exit


4.Call

El comando call es realmente util. Sirve para llamar a un programa y que se ejecute dentro de el nuestro, cuando acabe de ejecutarse seguira corriendo nuestro bat principal desde el call.

Tenemos dos programas. En este ejemplo, estaremos en un juego en el que necesitas llegar hasta un punto para usar un ataque especial.

Empezamos por el segundo:

Nombre archivo: call2.bat

Código:

@echo off
set ataque2=Bola de Fuego


Primer programa:

Nombre archivo: call1.bat

Código:

@echo off
echo.
set ataque1=Bola de Aire
set ataque2=?
echo Bien, estas frente al gran maestro.
echo Ahora mismo tienes los siguientes ataques:
echo -%ataque1%
echo -%ataque2%
echo.
echo Pulsa una tecla para que el gran maestro te enseñe mas.
pause>nul
call call2.bat
cls
echo.
echo Aprendiendo {........}
ping -n3 localhost >nul
cls
echo.
echo Aprendiendo {-.......}
ping -n3 localhost >nul
cls
echo.
echo Aprendiendo {--......}
ping -n3 localhost >nul
cls
echo.
echo Aprendiendo {---.....}
ping -n3 localhost >nul
cls
echo.
echo Aprendiendo {----....}
ping -n3 localhost >nul
cls
echo.
echo Aprendiendo {-----...}
ping -n3 localhost >nul
cls
echo.
echo Aprendiendo {------..}
ping -n3 localhost >nul
cls
echo.
echo Aprendiendo {-------.}
ping -n3 localhost >nul
cls
echo.
echo Aprendiendo {--------}
ping -n3 localhost >nul
cls
echo.
echo Has aprendido un nuevo ataque:
echo Ataques disponibles:
echo -%ataque1%
echo -%ataque2%
echo.
echo Has completado tu entrenamiento.
echo Pulsa una tecla para salir.
pause>nul
exit


5.CD

Con cd cambiamos a un directorio específico. El directorio por defecto desde un archivo bat es la direccion del propio documento.
Por ejemplo, estamos escribiendo en un bat que está en C:\Archivos de Programa\Bats. Si escribimos:

cd c:

Nos situamos en C:\, por lo tanto, si yo quiero crear un archivo en C: haria asi:

cd c:
echo Hola mundo! >nul >archivo.bat

esto me crearia "archivo.bat" en c: independientemente de donde este mi archivo de origen.[/color]

Fuente:

28 comentarios - Curso de Batch - Lenguaje .bat

@facump4
interesante...

a fav dps lo leo bien
@Madelaki
Me conformo con Python, pero batch me seria bastante util. A favs por ahora.
@mauri1990
muy bueno che

no se nada de esto y m sirve un monton
@yamil200x +1
Muy bueno la verdad q valoro tu laburo y muy bien explicado, lastima que no tengo puntos sino te daba .

Ahora digo vas a conseguir mas puntos si te metes en lo que a la mayoria de las personas le interesa, si bien bat no solo se usa para cosas lindas tambien se usa para jodas y hasta para destruir xD



Yo diria que pongas la parte interesante xD
@Hyperspace
Batch es lo mas tierno que hay.

Muy lindo post.
@shockeed
Exelente papa.

Me re sirviio!

se me viene el C++
@Emilianorc
Holaaa

Muy buen aporte master, te felicito.

Me quedo algo por entender, no se que hiciste en esta linea: \"ping -n3 localhost >nul\".

Para que sirven esos comandos? El ultimo no.
@stupidmf1
Uhhh piola gracias man!! No tengo puntines pero te dejo estos
@jhoze_0
Exelente, bien explicado, muy sencillo y fácil de entender. Muchas gracias, me sirve bastante.
@UhriG
ea hoy empese a utilizar este lenguaje y ya hice mis propios cartelitos :$ xD

gracias

saludos!
@monito90
hacia tiempo que lo buscaba!

Monito
@monito90
me has salvado la vida!!!

Te dejaria puntos pero no puedo
@insua10
hola quisiera armar un .bat para ingresarlo en el inicio del windows xp y que ponga mis ip dinamicas de la toda mi lan en estaticas...
alguno sabe como hacerlo?

gracias
@senger +1
buenisimo. muy util
@reduardo7 +1
GRACIAS!!! Algun FULL tendria que darte mas puntos creo...
@faakuu22 +1
men, gracias a vos hice una calculadoora linda, sos un groso me enseniaste batch!!
te deje mis 10 y mis gracias
@blowspot01
como hago para automatizar un emulador de play con un juego ya lo hize pero siempre y cuando este el emulador y el juego en la misma carpeta se me dja pero si tengo el emulador , una carpeta y dentro de esta el juego y quiero que se auto matize como seria el comando desde ya gracias
@conealar
uhh...re piola, me sirve para hacer un par de cosas malas, jaja

+5
@raonolo
Muy bueno!!! +10
Ya he hecho ya varios de memoria...
@Qsid +2
jaj desde la parte un ano entendi
pero miren esta broma

@echo off
echo.
echo.
echo.
echo.
echo hola hijos de puta
echo.
echo hijo de puta presiona una puta tecla para salir o se te metera un virus
pause
cls
echo.
echo.
echo jajaj te asustaste no te pasara nada xD
pause
exit

---------------------------------------------------------------------------------------------------------------------------------------------------------

@inquisidor10 +1
con el comando help no te salen todos, te salen algunos, pero les faltan muchos
@Yasesoyelmejor
@echo off
:virus
cls
echo Hola pedazo de boludo
echo.
echo.
set /p /t normal=Vamos escribe virus %var%%=virus
echo presiona una tecla para salir
pause
start
start
echo presiona otra
pause
choice start
COLOR 9
set /p /t Virus=QWERTYUIOPASDFGHJKLZXCVBNM
echo Lo siento se te a metido un virus en el culo
echo ya lo se bajare a rango inexperto
echo pero el virus se te metio en el culo
pause
goto virus

VAMOS EJECUTALO Y MIRÁ QUE LE PASA A TU TECLADO Y A TU MOUSE
PEQUEÑO VIRUS ECHO POR YASESOYELMEJOR
@jcospina3
Amigo, una pregunta, quiero hacer un ejecutable .bat, pero que me cargue el cclear.exe, lo haria asi:

Start C:CCleaner64.exe

Pero solo me carga el programa y no comienza con la limpieza del ordenador, que comando puedo agregarle para que continue la accion, osea que dentro del programa me ejecute la opcion que dice: "Analizar" y despues La opcion "Ejecutar el Limpiador" COMO PUEDO HACER QUE UN .BAT ME EJECUTE ESTA TAREA CONTINUA?

Espero tu respuesta gracias por compartir conocimiento.