Ficheros de procesamiento por lotes .BATCH
Para módulo SIRL
Ficheros de procesamiento por lotes .BATCH. Los ficheros por lotes dan la posibilidad de automatizar una tarea rutinaria ejecutando una serie de órdenes definidas con antelación lo que evita que los usuarios de ms-dos repitan una determinada secuencia de órdenes lo que resulta una tarea molesta e incómoda.
Contenido
- 1 Concepto de fichero por lotes
- 2 Características del Procesamiento por Lotes
- 3 Ordenes
- 4 La orden ECHO
- 5 La orden REM
- 6 Gestión de parámetros
- 7 La orden PAUSE
- 8 La orden GOTO
- 9 La orden IF
- 10 La orden CHOICE
- 11 Las variables del entorno
- 12 Otras órdenes
- 13 La orden FOR
- 14 La orden SHIFT
- 15 La orden CALL
- 16 Sistemas Operativos de procesamiento por Lotes
- 17 Multiprogramación
- 18 Fuentes
Concepto de fichero por lotes
Se conoce como sistema por lotes, o modo batch, a la ejecución de un programa sin el control o supervisión directa del usuario (que se denomina procesamiento interactivo). Este tipo de programas se caracterizan porque su ejecución no precisa ningún tipo de interacción con el usuario. También, en los ordenadores más grandes el proceso de recogida de programas y de conjuntos de datos de los usuarios, la ejecución de uno o unos pocos cada vez y la entrega de los resultados a los usuarios, es conocido como fichero por lotes.
También puede referirse al proceso de almacenar transacciones durante un cierto lapso antes de su envío a un archivo maestro, por lo general una operación separada que se efectúa durante la noche.
Generalmente, este tipo de ejecución se utiliza en tareas repetitivas sobre grandes conjuntos de información, ya que sería tedioso y propenso a errores realizarlo manualmente. Los programas que ejecutan por lotes suelen especificar su funcionamiento mediante scripts o guiones (procedimientos) en los que se indica qué se quiere ejecutar y, posiblemente, qué tipo de recursos necesita reservar.
Un fichero por lotes es un fichero ASCII que contiene una serie de órdenes.Es un archivo de texto o programa formado por varios comandos del MS-DOS. Usted puede escribir sus propios archivos de proceso por lotes directamente con el comando COPY del MS-DOS, o con el procesador de textos de su preferencia, en este solo debe guardarlos como. bath
Como ejemplo, vamos a crear un fichero por lotes llamado
TIEMPO.BAT. Para su confección podemos utilizar la orden Copy o el
programa Edit. C:\BATH>copy con tiempo.batdate
time
^Z
1 archivo(s) copiado(s)
Si ahora ejecutamos el fichero recién creado, vemos como entran en funcionamiento las órdenes Date y Time.
C:\BATH>tiempo
C:\BATH>date La fecha actual es Mar 15/08/1995
Escriba la nueva fecha (dd-mm-aa):
C:\BATH>timeLa hora actual es 0:53:54,12
Escriba la nueva hora:
C:\BATH>
Características del Procesamiento por Lotes
- Requiere que el programa, datos y órdenes al sistema sean remitidos todos juntos en forma de lote.
- Permiten poca o ninguna interacción usuario/programa en ejecución.
- Una mayor potencial de utilización de recursos que procesamiento serial simple en sistemas multiusuarios.
- No conveniente para desarrollo de programas por bajo tiempo de retorno y depuración fuera de línea.
- Conveniente para programas de largos tiempos de ejecución (ej, análisis estadísticos, nóminas de personal, etc.).
- Se encuentra en muchos computadores personales combinados con procesamiento serial.
- La planificación del procesador es sencilla, típicamente procesados en orden de llegada.
- La planificación de memoria es sencilla, generalmente se divide en dos: parte residente del S.O. y programas transitorios.
- No requieren gestión crítica de dispositivos en el tiempo.
- Suelen proporcionar gestión sencilla de manejo de archivos: se requiere poca protección y ningún control de concurrencia para el acceso.
- Populares representantes de sistemas multiprogramados multiusuario, ejemplo: sistemas de diseño asistido por computador, procesamiento de texto, etc.
- Dan la ilusión de que cada usuario tiene una máquina para sí.
- La mayoría utilizan algoritmo de reparto circular.
- Los programas se ejecutan con prioridad rotatoria que se incrementa con la espera y disminuye después de concedido el servicio.
- Evitan monopolización del sistema asignando tiempos de procesador.
- La gestión de memoria proporciona protección a programas residentes.
- La gestión de archivo debe proporcionar protección y control de acceso debido a que pueden existir múltiples usuarios accediendo a un mismo archivo.
- Todos deben llevar obligatoriamente la extensión .BAT
- Son ficheros de texto ASCII y, por consiguiente, pueden ser creados por Copy o Edit.
- Cada línea del fichero debe poseer una orden.
- Para hacerlo funcionar simplemente debemos teclear su nombre a continuación del símbolo del sistema. El fichero por lotes tomará entonces el control del ordenador.
- Podemos detener el procesamiento del fichero por lotes en cualquier momento presionando Ctrl+Pausa.
Ordenes
Todas las órdenes admitidas después del símbolo del sistema pueden introducirse también en un fichero por lotes. Además, existen una serie de órdenes diseñadas específicamente para estos ficheros: Orden Breve descripción
Orden | Breve descripción |
Echo | Controla el eco de las órdenes y visualiza mensajes |
Rem |
Introduce comentarios |
Pause |
Detiene temporalmente el desarrollo de un programa |
Goto |
Desvía incondicionalmente el desarrollo de un programa |
If |
Desvía condicionalmente el desarrollo de un programa |
Choise |
Permite elegir entre unas opciones establecidas |
Call |
Llama a un fichero por lotes desde otro |
For |
Repite una misma orden en un conjunto de ficheros |
Shift |
Desplaza el valor de los parámetros |
La siguiente tabla muestra aquellos símbolos empleados exclusivamente en los ficheros por lotes:
Símbolo | Significado |
:etiqueta | Nombre de una etiqueta |
%número | Parámetro del fichero por lotes |
%variable% | Variable del entorno |
%%variable | Variable de la orden For |
La orden ECHO
Se puede utilizar de cinco formas:
ECHO | Indica si está activado o desactivado el eco de las órdenes |
ECHO ON | Activa el eco |
ECHO OFF | Desactiva el eco |
ECHO mensaje | Visualiza un mensaje en pantalla |
ECHO | Visualiza una línea en blanco en pantalla |
El eco de una orden es el propio nombre de aquella escrito en la pantalla. Al poner en marcha el fichero anterior, observará como aparece el nombre de cada orden en pantalla antes de ejecutarse. Al fichero del ejemplo podemos añadirle la línea ECHO OFF para desactivar el eco en lo sucesivo. Para eliminar el eco de la propia orden ECHO OFF se antepone el símbolo arroba (@) al nombre de la orden. Veámoslo más claro en los ejemplos siguientes.
Programa:
echo off
date
time
Ejecución:
C:\BATH>tiempo
C:\BATH>echo off
La fecha actual es Mar 15/08/1995
Escriba la nueva fecha (dd-mm-aa):
La hora actual es 0:53:54,12
Escriba la nueva hora:
Programa:
@echo off
date
time
Ejecución:
C:\BATH>tiempo
La fecha actual es Mar 15/08/1995
Escriba la nueva fecha (dd-mm-aa):
La hora actual es 0:53:54,12
Escriba la nueva hora:
La orden Echo también permite mostrar mensajes al usuario del fichero. En el siguiente ejemplo se ha introducido el mensaje "Este es el fichero TIEMPO.BAT":
Programa:
@echo off
echo Este es el fichero TIEMPO.BAT
date
time
Ejecución:
C:\BATH>tiempo
Este es el fichero TIEMPO.BAT
La fecha actual es Mar 15/08/1995
Escriba la nueva fecha (dd-mm-aa):
La hora actual es 1:10:22,72
Escriba la nueva hora:
La orden REM
Permite introducir comentarios internos en el código de un fichero por lotes. Las líneas precedidas por la palabra Rem serán ignoradas durante el funcionamiento del fichero por lotes. Se suele utilizar esta orden para introducir aclaraciones en el código del fichero. Objetivo: facilitar su lectura y corrección de errores.
@echo off
rem Programa: TIEMPO.BAT
rem Cometido: Mostrar al usuario la fecha y la hora del
rem sistema y ofrecerle la oportunidad de modificarla.
date
time
Gestión de parámetros
Los parámetros son informaciones adicionales colocadas detrás del nombre de una orden. Si la mayoría de las órdenes de ms-dos admiten parámetros, también será posible gestionar parámetros en los ficheros por lotes. Vamos a confeccionar un fichero por lotes que borre dos ficheros introducidos como parámetros.
Programa: @echo off
rem Programa: BORRA2.BAT
del %1
del %2
Ejecución: A:\>borra2 juan.txt maria.txt
En la línea de órdenes, cada parámetro debe estar separado con un espacio en blanco del anterior. De la forma anteriormente explicada podemos gestionar hasta nueve de ellos (del %1 al %9). Para referirnos a un parámetro introducido en la línea de órdenes del programa, debemos escribir el signo de porcentaje (%) seguido del número de parámetro.
El siguiente ejemplo copia los ficheros introducidos como
parámetros al disquete de la unidad B: Programa: @echo offrem Programa:
COPIAB.BAT
echo Se están copiando los ficheros %1, %2 y %3 a la unidad B:
copy %1 b:\copy %2 b:\
copy %3 b:\ Ejecución: A:\>copiab juan.bak alberto.bmp marta.dbf
La orden PAUSE
Detiene temporalmente el desarrollo de un programa. Cuando el dos encuentra una orden Pause en un fichero por lotes visualiza un mensaje en pantalla y espera una tecla para proseguir. También podemos presionar Ctrl+Pausa y así, interrumpir el desarrollo del fichero. Presione cualquier tecla para continuar . . . Para mejorar la presentación, podemos insertar un mensaje indicando el motivo de la detención del programa gracias a la orden Echo: echo Inserte un disquete en la unidad B:pause
Si no deseamos ver el mensaje de Pause, podemos redireccionarlo al dispositivo ficticio NUL. echo Inserte un disquete en B: y pulse Enter pause >nul
La orden GOTO
Normalmente un fichero por lotes se desarrolla secuencialmente, desde
la primera línea hasta la última. Sin embargo, la orden Goto permite
desviar la ejecución del programa hasta una etiqueta especificada como
parámetro.
GOTO [:]etiqueta
Las etiquetas deben ir precedidas de dos puntos (:) para diferenciarse de las
órdenes.
Admiten hasta ocho caracteres significativos. Esto último significa que
la etiqueta `BALANCE_DE_AGOSTO' es idéntica a `BALANCE_DE_ENERO'.
El siguiente ejemplo muestra cómo se usan las etiquetas:
Programa:
@echo off
ver
goto Final
vol
:Final
Ejecución:
Versión MS-DOS 6.22
En este ejemplo, la orden
Vol nunca se ejecutará: al llegar la orden GOTO FINAL, ms-dos salta
hasta la etiqueta :Final y termina el fichero porque no hay más líneas.
Vamos a crear un programa para copiar varios disquetes desde la unidad A: al directorio actual.
@echo off
rem Programa: DEMO.BAT
echo ********************************************
echo ** Este programa copia todos los ficheros **
echo ** de la unidad A: al directorio actual **
echo ********************************************
pause
Proceso
copy a:\
echo Introduzca el siguiente disquete en A: y pulse Enter
pause >nul
goto Proceso
En primer lugar el programa muestra en pantalla su cometido y así, el usuario decide entre continuar (Enter) o abandonar (Ctrl+Pausa). Si pulsa Enter se copian todos los ficheros del directorio raíz de A: en el directorio actual.
Luego, se ofrece la posibilidad de introducir otro disquete. Si
pulsamos Enter se ejecuta la orden GOTO PROCESO, desviando la ejecución
del programa hasta la etiqueta :Proceso. En cambio, si pulsamos
Ctrl+Pausa el programa finaliza, apareciendo el símbolo del sistema.
La orden IF
Desvía condicionalmente el proceso de ejecución de un fichero por lotes. Admite 6 sintaxis diferentes:
IF EXIST fichero orden | Si existe el fichero se ejecuta la orden |
IF NO EXIST fichero orden | Si no existe el fichero se ejecuta la orden |
IF cadena1==cadena2 orden | Si ambas cadenas son iguales se jecuta la orden |
IF NOT cadena1==cadena2 orden | Si ambas cadenas son diferentes se ejecuta la orden |
IF ERRORLEVEL número orden | Si el código de salida del último programa es = o superior al #, se ejecuta la orden |
IF NOT ERRORLEVEL número orden |
Si el código de salida del último programa es = o superior al #, se ejecuta la orden |
IF EXIST
Un programador debe considerar todas y cada una de las
situaciones posibles al ejecutarse su programa y, por tanto, debe evitar
la aparición de mensajes de error inesperados en la pantalla.
Suponga el siguiente fichero por lotes:
@echo off
del %1
Si ahora lo hacemos funcionar introduciendo como parámetro un fichero inexistente, el ms-dos tomará el control y dará su correspondiente mensaje de error. Este fichero resulta más correcto si contiene las siguientes líneas:
@echo off
if not exist %1 echo ¡Es imposible borrar un fichero que no existe!
if exist %1 del %1
De esta forma, la orden Del sólo funciona si el fichero existe.
IF cadena1==cadena2
Encuentra su utilidad al trabajar con parámetros en un fichero por lotes.
En el fichero BORRA2.BAT hemos supuesto que el usuario siempre introduce dos parámetros. Sin embargo, se producirá un error si el usuario sólo introduce uno de ellos: la orden DEL %2 quedará transformada en DEL a secas y como Del no funciona sin parámetros, ms-dos mostrará una advertencia. Este problema se soluciona con lo siguiente:
@echo off
rem Programa: BORRA2B.BAT
if "%1"=="" echo Debe introducir uno o dos ficheros como parámetros.
if not "%1"=="" del %1
if not "%2"=="" del %2
La primera línea If avisa si no se ha introducido ningún parámetro. La segunda línea únicamente borrará el primer parámetro si se ha introducido. La tercera línea hace lo mismo pero con el segundo parámetro.
IF ERRORLEVEL
Cada orden externa de ms-dos genera un código de salida a su término indicando si pudo realizarse satisfactoriamente.
Generalmente un código de salida 0 indica que no hubo ningún problema y un código de salida superior hace referencia a diferentes errores.
Muchos ficheros por lotes necesitan saber si la orden anterior cumplió su cometido correctamente: para ello utilizan la orden If errorlevel.
Es muy importante recordar que la orden se ejecutará si el código de salida es igual o superior al especificado detrás de ERRORLEVEL.
A modo de ejemplo tenemos a continuación los códigos de salida de Xcopy:
Código | Significado |
0 | Los ficheros fueron copiados sin error |
1 | No se encontraron ficheros para copiar |
2 | El usuario presionó Ctrl+Pausa para suspender el proceso de Xcopy |
4 | Ocurrió un error de inicio. No hay suficiente memoria o espacio en disco, se introdujo un nombre de unidad no válida o se utilizó una sintaxix incorrecta en la línea de órdenes |
5 | Ocurrió un error de escritura de disco |
Vamos a crear un fichero por lotes para copiar los ficheros de la unidad A: a la B: e informe del resultado de la copia.
@echo off
rem Programa: COPIA-AB.BAT
xcopy a:\ b:\
if errorlevel 1 goto Error
if errorlevel 0 echo ¡La copia fue correcta!
goto Final
- error
echo Se produjo un error durante la copia
- final
En primer lugar, Xcopy intenta realizar la copia de ficheros y devolverá un código de salida. Si se ha producido algún error el código será 1 o superior y entonces, el programa se desvía hasta la etiqueta :Error, muestra el mensaje y finaliza. Si la copia fue satisfactoria, el código de salida es 0. La segunda línea If mostrará el mensaje de éxito, saltando después a la etiqueta :Final y como no hay más líneas, termina el proceso.
En muchas ocasiones puede ser fuente de complicaciones que If errorlevel número se cumpla si el número es igual o mayor. Para cumplirse exclusivamente si el código de salida es 5 -por ejemplo- podemos usar lo siguiente:
if errorlevel 5 if not errorlevel 6 dir
Esta compleja línea se traduce así: «Si el código de salida es 5 o superior pero inferior a 6 ejecutar Dir», es decir, si el código es 5 ejecutar Dir.
La orden CHOICE
Permite escoger una opción entre varias y, dependiendo de la opción elegida, devuelve un código de salida.
Su sintaxis es:
CHOICE [mensaje] [/C:opciones] [/N] [/S] [/T:opción,segundos]
/C:opciones |
Especifica las opciones posibles. Si el usuario pulsa la primera de
las opciones, Choice devolverá un código de salida 1; si pulsa la
segunda opción, Choice devuelve el código 2 y así sucesivamente. Si no
se especifica este parámetro se asumen las opciones por defecto (SN) |
/N |
No muestra las opciones admitidas detrás del mensaje |
/S |
Hace distinción entre mayúsculas y minúsculas. Si no se especifica este parámetro se toman como la misma opción. |
/T:opción,segs |
Toma la opción indicada si no se pulsa ninguna otra tecla en los segundos especificados. |
mensaje |
Contiene el mensaje mostrado al usuario pidiendo que introduzca una de las opciones admitidas |
El programa DEMO.BAT podemos mejorarlo sensiblemente si cambiamos las órdenes Pause por órdenes Choice.
@echo off
rem Programa: DEMO.BAT
echo ********************************************
echo ** Este programa copia todos los ficheros **
echo ** de la unidad A: al directorio actual **
echo ********************************************
choice ¿Desea continuar?
if errorlevel 2 goto Final
- Proceso
copy a:\ .
choice Para continuar con otro disquete pulse C y para finalizar, F /C:FC
if errorlevel 2 goto proceso
- Final
En la primera orden Choice se toman las opciones por defecto S y N. `S' corresponde a un código de salida 1 y `N' a un código 2. En la segunda orden Choice se toman las opciones F y C. `F' corresponde a un código 1 y `C' a un código 2.
Con la orden Choice y de una forma muy sencilla podemos crear menús con diferentes opciones:
@echo off
rem Programa: UTIL.BAT
- Menu
cls
echo UTILIDADES DE MS-DOS
echo --------------------
echo.
echo A. Anti-Virus
echo B. Backup
echo D. Defragmentar
echo E. Editor
echo S. Salir
echo.
choice ¿Qué utilidad desea comenzar? /c:abdes /n /t:s,15
if errorlevel 5 goto Salir
if errorlevel 4 goto Editor
if errorlevel 3 goto Defrag
if errorlevel 2 goto Backup
if errorlevel 1 goto Anti
if errorlevel 0 goto Men
:Anti
MSAV
goto Menu
- Backup
MSBACKUP
goto Menu
- Defrag
DEFRAG
goto Menu
- Editor
EDIT
goto Menu
- Salir
echo.
Observe la orden Choice: el modificador /C indica las opciones
admitidas. Si se pulsa la `A' se generará un código de salida 1 y así
sucesivamente hasta la `S' que corresponde a un código 5. Gracias al
modificador /N Choice no muestra las teclas admitidas detrás del
mensaje. El modificador /T toma como opción por defecto la `S' si pasan
15 segundos sin pulsar ninguna tecla.
Observe, asimismo, cómo se ha comenzado en las líneas If por el errorlevel más alto: así se evitan conflictos. El código de salida 0 se obtiene si el usuario responde con Ctrl+Pausa al mensaje de Choice.
Las variables del entorno
Se puede recuperar el valor de una determinada variable del entorno introduciendo ésta entre signos de porcentajes (%NombreVariable%).
Ejemplo:
Echo El valor de la variable PATH es PATH
Echo El valor de la variable PROMPT es PROMPT
El siguiente ejemplo da el valor C:\DOS a la variable TEMP si no ha sido definida:
Otras órdenes
Existen otras tres órdenes más diseñadas para su uso en ficheros por lotes. Como estas órdenes tienen un menor uso, se exponen resumidamente a continuación.
La orden FOR
Su sintaxis es:
FOR %%variable IN (conjunto) DO orden
Esta orden repite la orden especificada para cada valor del
conjunto. Conjunto es una lista de nombres de ficheros. En ella, se
pueden establecer varios nombres separados por espacios y también,
utilizar comodines.
Ejemplo
for %%I in (juan.txt maria.txt *.dat) do type %%i
La variable %%I va tomando cada uno de los valores del conjunto y se los envía a la orden Type. En este ejemplo se visualizan en pantalla los ficheros JUAN.TXT, MARIA.TXT y todos los que tengan extensión DAT.
La orden SHIFT
Se traduce al español por desplazamiento. Mueve el valor de cada parámetro a la variable anterior. Por ejemplo, si existen 3 parámetros (%1, %2 y %3) y se utiliza la orden Shift, el valor de %1 lo tomará %0, el valor de %2 lo tomará %1 y el valor de %3 lo tomará %2.
Programa:
@echo off
rem Programa: DEMO2.BAT
echo El parámetro 1 es %1
shift
echo El parámetro 2 es %1
shift
echo El parámetro 3 es %1
Ejecución:
C:\BATH>demo2 juan maria alberto
El parámetro 1 es juan
El parámetro 2 es maria
El parámetro 3 es alberto
C:\BATH>
La orden CALL
Se utiliza para llamar a un fichero por lotes desde el interior de otro. Su sintaxis es:
CALL fichero [ParámetrosDelFichero]
En
el siguiente ejemplo, el fichero PRG1.BAT llama a PRG2.BAT. Cuando la
ejecución de PRG2.BAT termina, continua PRG1.BAT en la siguiente línea a
Call.
Programa PRG1.BAT:
@echo off
echo línea 1
call prg2.bat
echo línea 4
echo línea 5
Programa PRG2.BAT:
@echo off
echo línea 2
echo línea 3
Ejecución:
C:\BATH>prg1
línea 1
línea 2
línea 3
línea 4
línea 5
C:\BATH>
Sistemas Operativos de procesamiento por Lotes
La Computadora ejecuta un programa a la vez al procesar datos en grupo o en lotes. En los Sistemas operativos antiguos, los usuarios tenían que entregar sus trabajos al centro de computo en paquetes de tarjetas perforadas. Tenían que esperar horas y hasta días para que se le devolviera impresiones a sus escritorios.
Los Sistemas Operativos por lotes, procesan un conjunto de trabajos (con características afines) al mismo tiempo, es decir, con poca o ninguna interacción entre los usuarios y los programas en ejecución. Estos sistemas no son convenientes para el desarrollo de programas de poco tiempo de respuesta sino que están diseñados para conjuntos de programas de largos tiempos de ejecución los cuales no pueden ser interrumpidos. Un ejemplo de estos lotes pueden ser: análisis estadísticos, nóminas de personal.
Los sistemas que utilizan esta variante son sistemas de objetivo específico, con un fin común, son por ejemplo sistemas capaces de controlar ciertas maquinarias y ciertas tareas que no pueden ser interrumplibles. Es por ello que el usuario no puede interactuar con el sistema cuando hay un lote ejecutándose.
Algunos ejemplos de Sistemas Operativos de Procesamiento por Lotes son: el SCOPE, el cual está orientado a procesamiento científico pesado, y el EXEC II, orientado a procesamiento académico.
Multiprogramación
Al hacerse mas poderosas las computadoras se hizo evidente que el procesamiento por lotes no utilizaba eficazmente los recursos de la PC. Se pensó en hacer que se compartieran los recursos para obtener mejor utilización, esto se conoce como multiprogramación. Esta implica la operación simultánea de muchos trabajos en una Computadora.
Sistemas Multiprogramados de Tiempo Compartido
Estos sistemas funcionan similar a la multiprogramación. El objetivo de la multiprogramación es permitir que varios procesos se ejecuten simultáneamente, pero para lograrlo, cada proceso debe ejecutarse un cierto tiempo y luego entregar el control de la CPU a otro, de este mecanismo se encarga los sistemas de Tiempo Compartido.
Es decir estos sistemas reparten equitativamente el tiempo de CPU entre los procesos. La ventaja que tienen es que soportan muchos usuarios simultáneamente, pero trae como consecuencia una gran carga de trabajo al Sistema Operativo, principalmente en la administración de memoria principal y secundaria.
Ejemplos de Sistemas Operativos de tiempo compartido son: Multics, OS/360 yEC-10.
Fuentes
- Ficheros Lotes
- terminos-viricos
- C con Clase
- Wesley, Addison. C++ Network Programming, Volume I - Mastering Complexity with ACE and Patterns
- Como programar en C y C++ Tomo I
..
..Fuente: EcuRED
----------------------------------------------------------------
----------------------------------------------------------------