domingo, 11 de septiembre de 2011

Manual super sencillo de Batch by 2Fac3R (parte 1)

¿Que es Batch?
Bueno, es sencillo es un lenguaje de programación de scripting ( o sea, que no necesita compilación para probarlo, si quieres una definición mejor busca en Google), este lenguaje muchos dicen que no es potente, y en parte tienen razón y en partes no, me explico, todo depende de la imaginación que tenga uno para hacer sus codes, bueno la parte verdadera es que con Batch no se puede hacer por ejemplo un Sistema Operativo ( es un ejemplo exagerado, pero sirve como ejemplo, xD) o tampoco es posible crear un Keylogger, por ejemplo, pero si se pueden hacer muchas cosas como; troyano, worm o cualquier tipo de Malware (Claro que no sera igual a uno creado en "C" por ejemplo), pero es muy utli y nos puede servir para varias cosas.
¿Que podemos hacer en Batch?
Bueno como ya he dicho se pueden hacer cientos de cosas pero depende de tu
imaginación, como por ejemplo, podemos hacer desde agendas, calculadoras, virus,
etc. Todo depende de tu imaginaci�n y de lo que quieras hacer en Batch

OTRAS COSAS:
Primero que nada no me hago responsable del mal uso que este manual pueda llegar
a dar ideas xD. Otra cosa es que recuerda que Batch es simple, a que me refiero?,
bueno me refiero a que no puedes hacer de batch muchas cosas que se pueden hacer
en otros lenguajes de programación como; C, Python, Perl, Pascal, etc. Otra cosa
este manual esta hecho para el aprendizaje por lo tanto, no voy a mostrar el "super
paso a paso" de como se hagan las cosas, si no explico algo es para que te enseñes
a buscar en google o se te quite la verguenza de preguntar a un colega que sepa del
tema, disculpen si esto es latoso pero es necesario para el aprendizaje.

-Ya me estas aburriendo ve al grano- Ya ya voy, xd.

Empecemos:

¿COMO HAGO UN PROGRAMA EN BATCH?
Bueno aquí vamos a necesitar el block de notas, y una mente abierta, abrimos el
block de notas

La estructura de Batch es la siguiente:
Código: [Seleccionar]
@echo off
:: Codigo
Exit
Empecemos por describirlos el �echo off� sirve para que no se muestren los
comandos que nosotros ponemos y el �@� sirve para que no se muestre ese echo off,
es aqu� donde van los comandos que vamos a teclear, y �exit� es el
comando para salir del archivo por lotes.

Vamos a un ejemplo muy conocido escribamos:
Código: [Seleccionar]
@echo off
Echo �Hola mundo�
Exit
el "echo" se usa para mostrar algo en pantalla.

Gu�rdalo con extensi�n �.bat� (o sea, guardar como --> holamundo.bat) y ejec�talo.

--Que co�o a pasado solo salio una ventanita negra muy r�pido desaparecio, me
estas viendo el pelo o que?--
No, no tranquilo, eso lo hice a prop�sito para
explicarte otro comando que es el �pause�.
Ahora da click derecho sobre �holamundo.bat� y elige �editar�, bueno nos salio la
ventanita de Block de notas, bien ahora escribe el siguiente code:

Código: [Seleccionar]
@echo off
Echo Hola mundo
Pause
Exit

-�Que ha pasado ahora si mostro el "hola mundo"?- Como ya dije antes el "pause"
pausa o detiene (xd) los comandos hasta que teclees una tecla, xd.

Bien vamos muy bien, este es el ejemplo que se usa al inicio de todo lenguaje de
programacion. Como ya dije ocupas una mente curiosa y te doy una ayudadita para
conseguir mas informacion de un comando usamos un parametro (-que es un parametro-)
(no te voy a hacerlo facil busca en Google) el cual es "/?" (sin comillas) por
ejemplo abre la shell de windows (inicio-->ejecutar-->cmd-->enter) y escribe "echo
/?" y da enter.

Te ha salido esto?:
Código: [Seleccionar]
Muestra mensajes o activa y desactiva el eco del comando.

ECHO [ON | OFF]
ECHO [mensaje]

Escriba ECHO sin par metros para mostrar la configuraci�n actual del eco.

Pues bien eso es lo que hace el comando "echo", son diferentes cosas, vdd?.

-Ahh se me ah ocurrido una idea, voy a ver que hace los comandos "exit" y
"pause" que me has ense�ado-

Perfecto si eres de los que piensan asi, eso te ayudara mucho en un futuro,
entonces ahora teclea "exit /?" y/o "pause /?".

Bueno, sigamos, espero que hayas entendido mas o menos lo que es un comando, sino
ya sabes que existe Google (yo recomiendo Google pero puedes buscar en tu buscador
favorito ya sea "Altavista", "Yahoo", etc)
-Todo esto se me hace bien pero no me gusta la ventanita negra para mis futuros
programas- Para ello tenemos el comando "Color" usa un poco de imaginacion y esto
te lo dejo a ti. (�una pista? "/?").
Quieres conocer todos los comandos (o la mayoria) que existen en MS-dos (Batch)?
Pues entonces teclea en la shell "help" y mira los comandos. Te ha salido esto:
Código: [Seleccionar]

"Para obtener mas informaci�n acerca de un comando especifico, escriba HELP
seguido del nombre de comando

ASSOC Muestra o modifica las asociaciones de las extensiones de archivos.
AT Planifica comandos y programas para ejecutarse en un equipo.
ATTRIB Muestra o cambia los atributos del archivo.
BREAK Establece o elimina la comprobaci�n extendida de Ctrl+C.
CALCS Muestra o modifica las listas de control de acceso (ACLs) de archivos.
CALL Llama a un programa por lotes desde otro.
CD Muestra el nombre del directorio actual o cambia a otro directorio.
CHCP Muestra o establece el n�mero de p gina de c�digos activa.
CHDIR Muestra el nombre del directorio actual o cambia a otro directorio.
CHKDSK Comprueba un disco y muestra un informe de su estado.
CHKNTFS Muestra o modifica la comprobaci�n de disco al iniciar.
CLS Borra la pantalla.
CMD Inicia una nueva instancia del int�rprete de comandos de Windows
COLOR Establece los colores de primer plano y fondo predeterminados de la
consola.
COMP Compara el contenido de dos archivos o un conjunto de archivos.
COMPACT Muestra o cambia el estado de compresi�n de archivos en particiones
NTFS.
CONVERT Convierte vol�menes FAT a vol�menes NTFS. No puede convertir
la unidad actual.
COPY Copia uno o m s archivos a otro lugar.
DATE Muestra o establece la fecha.
DEL Elimina uno o m s archivos.
DIR Muestra una lista de archivos y subdirectorios en un directorio.
DISKCOMP Compara el contenido de dos disquetes.
DISKCOPY Copia el contenido de un disquete en otro.
DOSKEY Edita l�neas de comando, memoriza comandos y crea macros.
ECHO Muestra mensajes, o activa y desactiva el eco.
ENDLOCAL Termina la b�squeda de variables de entorno del archivo por lotes.
ERASE Elimina uno o m s archivos.
EXIT Sale del programa CMD.EXE (interfaz de comandos).
FC Compara dos archivos o conjunto de archivos y muestra las diferencias
entre ellos.
FIND Busca una cadena de texto en uno o m s archivos.
FINDSTR Busca cadenas de texto en archivos.
FOR Ejecuta un comando para cada archivo en un conjunto de archivos.
FORMAT Da formato a un disco para usarse con Windows.
FTYPE Muestra o modifica los tipos de archivo utilizados en una asociaci�n
de archivos.
GOTO Direcciona el int�rprete de comandos de Windows a una l�nea en
un programa por lotes.
GRAFTABL Permite a Windows mostrar un conjunto de caracteres extendidos
en modo gr fico.
HELP Proporciona informaci�n de ayuda para los comandos de Windows.
IF Ejecuta procesos condicionales en programas por lotes.
LABEL Crea, cambia o elimina la etiqueta del volumen de un disco.
MD Crea un directorio.
MKDIR Crea un directorio.
MODE Configura un dispositivo de sistema.
MORE Muestra la informaci�n pantalla por pantalla.
MOVE Mueve uno o m s archivos de un directorio a otro en la misma unidad.
PATH Muestra o establece una ruta de b�squeda para archivos ejecutables.
PAUSE Suspende el proceso de un archivo por lotes y muestra un mensaje.
POPD Restaura el valor anterior del directorio actual guardado por PUSHD.
PRINT Imprime un archivo de texto.
PROMPT Cambia el s�mbolo de comandos de Windows.
PUSHD Guarda el directorio actual y despu�s lo cambia.
RD Elimina un directorio.
RECOVER Recupera la informaci�n legible de un disco da�ado o defectuoso.
REM Graba comentarios en archivos por lotes o CONFIG.SYS.
REN Cambia el nombre de uno o m s archivos.
RENAME Cambia el nombre de uno o m s archivos.
REPLACE Reemplaza archivos.
RMDIR Elimina un directorio.
SET Muestra, establece o elimina variables de entorno de Windows.
SETLOCAL Inicia la localizaci�n de cambios del entorno en un archivo por lotes.
SHIFT Cambia posici�n de modificadores reemplazables en archivos por lotes.
SORT Ordena las entradas.
START Inicia otra ventana para ejecutar un programa o comando.
SUBST Asocia una ruta de acceso con una letra de unidad.
TIME Muestra o establece la hora del sistema.
TITLE Establece el t�tulo de la ventana de una sesi�n de CMD.EXE.
TREE Muestra gr ficamente la estructura de directorios de una unidad o
ruta de acceso.
TYPE Muestra el contenido de un archivo de texto.
VER Muestra la versi�n de Windows.
VERIFY Comunica a Windows si debe comprobar que los archivos se escriben
de forma correcta en un disco.
VOL Muestra la etiqueta del volumen y el n�mero de serie del disco.
XCOPY Copia archivos y rboles de directorios."

-�Que, eres brujo o adivino?- No, no lo soy,xd.

Usa un poco de imaginacion para los comandos que no se vayan a explicar aqui.
Vamos a unos ejemplos de algunos comandos, usaremos como ejemplo el comando "start"
vamos:

Código: [Seleccionar]
@echo off
start www.google.com
pause>nul
exit

-Que co�o has hecho porque escribes "pause>nul" si me habias dicho que era solo
"pause"- Bueno ese es un parametro de "pause" pero no solo de pause se un poco
curioso y prueba.
-No M@m3$ ya no explicas nada- ok, ok el ">nul" sirve para que no se muestre el
comando es como "@echo off" pero solo para cierto comando, te has fijado que al
ejecutar el codigo no te aparece el "presione una tecla para continuar" pero si
tienes que presionar una tecla para continuar y ha abierto el explorador por
defecto que tengas ya sea el iexplorer, mozilla, chrome, etc. Bueno este es un
ejemplo del comando "start" como su nombre lo indica "inicia" algo. Vamos a otro
ejemplo, supongamos que queremos que nuestro programa haga que muestre "se va a
abrir el internet explorer" y que lo habra, �Como lo hariamos?.
Vamos a la practica:
Hagamos un algorito (un algoritmo es una serie de procedimiento que seguira en este
caso nuestro programa).
ALGORITMO:

1: Que no muestre los comandos (@echo off)
2: Que nos muestre "Se va a abrir el internet explorer" (echo ...)
3: Abrir el internet explorer (start...)
4: Pausar nuestro programa (pause | pause>nul)
5: Que se cierre.

Bien, vamos a hacer nuestro programa: (usare "#" para poner comentarios o cadenas")

Código: [Seleccionar]
@echo off #Vemos que es la "1" de nuestro algoritmo
echo Se va a abrir el internet explorer # 2 de nuestro algoritmo
start iexplorer #3 de nuestro algoritmo.
pause>nul #4
exit #5

-No sirve!!!- Me lo temia, puede que no sirva por varias cosas, una de ellas seria
que el internet explorer no este en el escritorio, otra seria que el nombre del ie
no es "iexplorer" sino "internetexplorer", otra logica seria que no tengas el
navegador (como yo,xd)
Prueba con otros programas.
Ten en cuenta que no se pone ".exe" ".txt" ni ".com" son las unicas excepciones
que nos da ms-dos. para otras extenciones de archivos se tendra que poner su
extencion. Vamos a otras cosas, explicare los comandos mas basicos que existen
"md", "rd", del,etc. "md" sirve para crear un directorio como nos dij� "help"
su sintaxis es:

MD [unidad:]ruta

vamos a crear una carpeta:

Código: [Seleccionar]
@echo off
md "nombre_de_carpeta"
pause>nul
exit

y nos ha creado una carpeta en el sitio actual donde esta el batch.
-Se me a ocurrido algo pero no se si se pueda, crear una carpeta en el disco local-
Si se puede aunque no este el batch en el directorio, para ello la sintaxis nos
pide unidad y ruta.
vamos a crear una carpeta con una subcarpeta llamada "b" en la carpeta "a"en el
disco duro llamado "C:"
Para ello hacemos esto:

Código: [Seleccionar]
@echo off
md c:\a\b
pause>nul
exit

-Pero que hago si mi disco no se llama "c:", pues tienes 2 opciones;
1.- simplemente cambiar el nombre por el que tu tengas
2.- Usar una variable de entorno

VARIABLES DE ENTORNO:

Las variables de entorno nos sirve para que en vez de escribir toda la ruta solo
escribamos la variable de entorno y nos sirve para lo mismo (xd, ni yo me entendi,
por eso vamos a la practica para que me entiendas mejor).

En este caso voy a explicar en el ejemplo de "md", suponemos que no tienes tu hd
con el nombre de c:/ sino con x:/ y tu amigo tiene su hd con el nombre f:/ y quieres
que tu programa de crear carpetas sirva tanto en tu pc como en la de tu amigo pepe
Te encuentras con el problema de que si pones:

Código: [Seleccionar]
@echo off
md x:\a\b\b1\ck
pause>nul
exit

en tu pc funciona, pero al mandarlo a tu amigo pepe, no le funciona porque el tiene
su hd llamado f: y tu pusiste "x:\", bien para ello utilizaremos una variable de
entorno la cual en este caso es: %homedrive%\, ahora vamos a ver nuestro code:

Código: [Seleccionar]
@echo off
md %homedrive%\a\b\b1\ck
pause>nul
exit

¿Que ha pasado?
Pues es simple la variable de entorno guarda el directorio por defecto de el hd.
ahora manda a tu amigo pepe y veras que le funciona :)
Vamos a poner otro ejemplo de variable de entorno.
Supongamos que quieres borrar una carpeta que hiciste en la subcarpeta de windows
llamada "system32" que tiene otra subcarpeta llamada "1028" la cual se llama prueba
para ello para crearla tuviste que hacer lo siguiente:

Código: [Seleccionar]
@echo off
md %homedrive%\WINDOWS\system32\1028\prueba
exit

y para borrala haces esto:

Código: [Seleccionar]
@echo off
rd %homedrive%\WINDOWS\system32\1028\prueba
exit

Pues te la haz complicado muchisimo, para borrarla con las variables de entorno
seria asi:

Código: [Seleccionar]
@echo off
md %windir%\system32\1028\prueba
exit

y para borrarla:

Código: [Seleccionar]
@echo off
rd %windir%\system32\1028\prueba
exit

Espero que hayas entendido lo de las variables de entorno, te pongo las que conosco:

Windows= %windir% 1 | %systemroot%
Archivos de Programa= %programfiles%
Archivos temporales= %TEMP% y %TMP%
Disco Local= %homedrive% | %SYSTEMDRIVE%
Carpeta de User= %userprofile% | %homepath%
Datos de programa = %APPDATA%

Bien explicado esto espero que sea facil el siguiente texto; el cual es sobre las
variables.
Empecemos.- Las variables se escriben entre signos de porcentajes ejemplo.-
%variable%. Una variable como su nombre lo dice varia segun el dato que se le de
por lo general son numeros por ejemplo al hacer una calculadora o en la mayoria de
los programas porque es la forma mas facil para que no haya problemas cuando el
usuario eliga. como no se explicarme -ah en serio?- vamos a la p`practica y a los
ejemplos:

Vamos a poner un ejemplo del archirequetereconocido "Hola %nombre"

Algoritmo sintetizado:

1.- Que nos pregunte nuestro nombre
2.- Que el nombre se guarde en una variable llamada "nombre"
3.- Que nos muestre nuestro nombre
4.- Fin

Vamos a codear
-Pero como lo hago si no me has explicado como guardar el nombre en la variable-
Bueno como ya sabes no soy bueno para explicarme asi que voy directo al ejemplo:

Código: [Seleccionar]
@echo off
echo �Cual es tu nombre?
set /p nombre=
cls
echo �Cual es tu apellido?
set /p apellido=
cls
echo ya te reconoci %nombre% %apellido%
echo adios
pause>nul
exit

Que es lo que hizo nuestro programa?, bueno primero que nada nos pregunta cual es
nuestro nombre y al teclear nuestro nombre lo guarda en la variable "nombre" con
el comando set /p y limpia la pantalla con el comando "cls", despues nos pregunta
nuestro apellido y lo guarda en la variable "apellido", limpia la pantalla y nos
dice ya te reconoci %nombre% (muestra lo que pusimos en "�Cual es tu nombre?")
%apellido% (muestra lo que guardamos en "Cual es tu apellido?"), y nos dice adios
y se cierra el bat.

Aqui termina la primera parte de este manual hecho por mi 2Fac3R. Dudas, sugerencias
o criticas opinen, tengan en cuenta que estoy ense�ando lo basico para que se
entienda sabemos que muchas cosas que aqui estan se pueden hacer con menos lineas,
aqui hable poco realmente de lo que es batch, en la siguiente parte me basare mas
en la practica y no en la teoria, haremos una calculadora, un bucle, worm y quiza
mas cosas. Por mientras trata de estudiar los comandos que vimos en "help".

Zalu2