lunes, 29 de septiembre de 2008

Programar en Batch (I)

Bill WHG [michel.grc1@gmail.com]

En múltiples ediciones de BlackHat se han publicado muchos temas sobre programación, ya sea Visual Basic, C++, entre otros, pero nada sobre Batch, un lenguaje muy sencillo y fácil para programar, esto se puede lograr solo con un Bloc de notas y sin necesidad compiladores.

Ahora que es Batch, o su diminutivo .Bat que no es mas que su aplicación.
Los archivo batch (o bat) no son mas que un archivos 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.

Batch es un sublenguaje de programación muy apreciado por muchísima gente, principalmente es MS-DOS, creado para hacer sistemas operativos, con dificultad de movimiento y escala, al principio, muy poca gente sabia usarlo, aunque fue una de los avances mas importantes del mundo. Con el se puede crear desde un simple programa para apagar nuestra PC, hasta un potente troyano, los cuales creados por Batch son muy nocivos en ocasiones, ya que no son detectados por antivirus, aunque suelen tener una pequeña desventaja, es que no se auto ejecutan, la victima tendrá que hacer el trabajo por ustedes.

Bien vamos la plato fuerte, como ya había dicho en programación BATCH se pueden poner todos los comandos permitidos en la consola de comandos, al ejecutar el programa los comando se ejecutarán de forma secuencial. Este es el típico programa de ¡HOLA MUNDO!:

Ejemplo:
Código:
@echo off
cls
echo ¡HOLA MUNDO!
pause>nul

Nota: El siguiente código debe ser escrito en un Bloc de notas, y guardado con extensión .bat

¿Porque se le llama .bat?
La respuesta es sencilla, en MS-DOS las extensiones tienen un máximo de 3 letras y se usan las tres primeras letras de BATCH
Efecto: Este código lo que hace es escribir en la pantalla ¡HOLA MUNDO!

Sobre los comandos

En batch usaremos todos los comandos de MS-Dos para crear nuestras aplicaciones, para el que no domine Dos leer primero sobre el tema.

La consola de comando es esa pantalla negra que seguro que todos han visto alguna vez, para ir a la consola vamos a INICIO allí entramos en EJECUTAR y escribimos cmd.exe. Nos saldrá una pantalla negra, allí se pueden escribir los comandos, por ejemplo escribir esto:

Código:
echo ¡HOLA A TODOS!!

En la pantalla saldrá escrito lo que pusimos, después del echo, ya explicare el echo mas adelante. Podemos personalizar la consola de comandos de igual manera que Dos, al final es puro MS-Dos en lo que estamos trabajando, quiero dejar claro que es lo mismo, no puede haber confusión.

Seguro que a algunos les gustaría cambiar el color de las letras de la consola de comandos o cambiar el color de fondo, bien pues para eso tenemos el comando color.

Esta es la descripción del comando al usar HELP:

Código:
Configura los colores predeterminados de primer y segundo plano de la consola.

COLOR [atr]
atr Especifica el atributo de color de la salida de consola

Los atributos de color están especificados con dos dígitos hex (el primero
corresponde al segundo plano; el segundo al primer plano). Los dígitos pueden ser cualquiera de los siguientes valores:

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

Si no se indican argumentos, este comando restaura el color que tenía cuando se inicio CMD.EXE. Este valor proviene de la ventana de la consola, el modificador de línea de comando o el valor del registro DefaultColor.

El comando COLOR configura ERRORLEVEL a 1 si se realiza un intento de ejecutar el comando COLOR con el mismo color de primer y segundo plano.

Por si no ha quedado muy claro tiene que escribir color seguido de dos dígitos, el primero indica el color de fondo y el segundo indica el color de las letras. Ejemplo:

Código:
color 0a
Esto cambia las letras a vede y el fondo a negro, pero como ya es negro solo cambia las letras.
Puro MS-DOS señores.

Ahora pasaremos a conocer una lista de comandos:
El comando HELP sirve para pedir ayuda sobre un comando o para ver la lista de comandos disponibles. Para ver los comandos disponibles Escribimos HELP en la consola, nos saldrá algo como esto:

Código:
Para obtener más 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 interprete 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 grafico.
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.

Nos solo existen estos comandos, también hay algunos como el ping, netstat, tracert,... pero estos más que comandos son programas que están en system32, los programas que están en system32 se pueden ejecutar desde la consola escribiendo su nombre.

Si necesitamos ayuda sobre un comando de los de esta lista solo hay que usar HELP "AQUI EL COMANDO". Por ejemplo más arriba hemos visto la ayuda del comando color, para ver esto tenemos que escribir:
Código:
help color

Si queremos ayuda en "comandos" como ping o tracert hay que escribir el comando y detrás "x" o "/?"

Comando ECHO:

ECHO

El echo es el comando mas simple y mas usado en programas en BATCH, lo único que hace es imprimir en la pantalla lo que se escribe detrás del echo, miren este ejemplo:
Código:
@echo off
cls
echo ¡Hola!, como te va
pause>nul
echo Como estas?
pause>nul
exit

Este código hace que es escriba en la pantalla "¡HOLA!, como te va" y cuando pulsas una tecla te dice: "Como estas?", cuando vuelves a pulsar una tecla el programa acaba. Esto no tiene más complicación.

ECHO OFF / ON

Este es muy fácil, pero también es importante. Si han observado algún programa en BATCH, habrán notado que todos empiezan así:

Código:
@echo off

Lo que hace este comando es que no se impriman los comandos que escribes en la pantalla, si haces un programa como el HOLA MUNDO y no escribes el echo off al principio en vez de salir esto:

Código:
¡HOLA MUNDO!

Saldría esto:
Código:
c:\WINDOWS\system32> echo ¡HOLA MUNDO!
¡HOLA MUNDO!

Así echaríamos a perder la imagen de nuestro proyecto

Continuará...



Artículos relacionados


No hay comentarios: