Documente Academic
Documente Profesional
Documente Cultură
En muchas ocasiones los usuarios de ms-dos repiten una determinada secuencia de rdenes da tras
da, suponiendo una tarea bastante molesta e incmoda. Los ficheros por lotes pretenden
automatizar una tarea rutinaria ejecutando una serie de rdenes definidas con antelacin.
En este captulo aprenderemos aquellas herramientas necesarias para crear un fichero por lotes. En
el captulo siguiente, se exponen y estudian tiles ejemplos que abarcan la totalidad del temario
estudiado.
Breve descripcin
Controla el eco de las rdenes y visualiza mensajes.
Introduce comentarios.
Detiene temporalmente el desarrollo de un programa.
Desva incondicionalmente el desarrollo de un programa.
Desva condicionalmente el desarrollo de un programa.
Permite elegir entre unas opciones establecidas.
Repite una misma orden en un conjunto de ficheros.
Llama a un fichero por lotes desde otro.
Shift
La siguiente tabla muestra aquellos smbolos empleados exclusivamente en los ficheros por lotes:
Smbolo
:etiqueta
%nmero
%variable%
%%variable
Significado
Nombre de una etiqueta.
Parmetro del fichero por lotes.
Variable del entorno.
Variable de la orden For.
Ejecucin:
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:
Luego, se ofrece la posibilidad de introducir otro disquete. Si pulsamos Enter se ejecuta la orden
GOTO PROCESO, desviando la ejecucin del programa hasta la etiqueta :Proceso. En cambio, si
pulsamos Ctrl+Pausa el programa finaliza, apareciendo el smbolo del sistema.
Ejercicios de autocomprobacin
4. Qu hace el siguiente fichero por lotes?
@echo off
dir c:\
goto etiqueta2
:etiqueta1
ver
:etiqueta2
10-8 La orden IF
Desva condicionalmente el proceso de ejecucin de un fichero por lotes. Admite 6 sintaxis
diferentes:
IF EXIST fichero orden
IF NOT EXIST fichero
orden
IF cadena1==cadena2
orden
IF NOT
cadena1==cadena2 orden
IF ERRORLEVEL
nmero orden
IF NOT ERRORLEVEL
nmero 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 aparicin 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 parmetro un fichero inexistente, el ms-dos
tomar el control y dar su correspondiente mensaje de error. Este fichero resulta ms correcto si
contiene las siguientes lneas:
@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 slo funciona si el fichero existe.
IF cadena1==cadena2
Encuentra su utilidad al trabajar con parmetros en un fichero por lotes.
En el fichero BORRA2.BAT hemos supuesto que el usuario siempre introduce dos parmetros. Sin
embargo, se producir un error si el usuario slo introduce uno de ellos: la orden DEL %2 quedar
transformada en DEL a secas y como Del no funciona sin parmetros, 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 parmetros.
if not "%1"=="" del %1
if not "%2"=="" del %2
Significado
Los ficheros fueron copiados sin error.
No se encontraron ficheros para copiar.
El usuario presion Ctrl+Pausa para suspender el proceso de Xcopy.
Ocurri un error de inicio. No hay suficiente memoria o espacio en el disco, se
introdujo un nombre de unidad no vlida o se utiliz una sintaxis incorrecta en la
lnea de rdenes.
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 cdigo de salida. Si se
ha producido algn error el cdigo ser 1 o superior y entonces, el programa se desva hasta la
etiqueta :Error, muestra el mensaje y finaliza. Si la copia fue satisfactoria, el cdigo de salida es 0.
La segunda lnea If mostrar el mensaje de xito, saltando despus a la etiqueta :Final y como no
hay ms lneas, termina el proceso.
En muchas ocasiones puede ser fuente de complicaciones que If errorlevel nmero se cumpla si el
nmero es igual o mayor. Para cumplirse exclusivamente si el cdigo de salida es 5 -por ejemplopodemos usar lo siguiente:
if errorlevel 5 if not errorlevel 6 dir
Esta compleja lnea se traduce as: Si el cdigo de salida es 5 o superior pero inferior a 6 ejecutar
Dir, es decir, si el cdigo es 5 ejecutar Dir.
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 enva a la orden Type.
En este ejemplo se visualizan en pantalla los ficheros JUAN.TXT, MARIA.TXT y todos los que
tengan extensin DAT.
La orden SHIFT
Se traduce al espaol por desplazamiento. Mueve el valor de cada parmetro a la variable anterior.
Por ejemplo, si existen 3 parmetros (%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 parmetro 1 es %1
shift
echo El parmetro 2 es %1
shift
echo El parmetro 3 es %1
Ejecucin:
C:\BATH>demo2 juan maria alberto
El parmetro 1 es juan
El parmetro 2 es maria
El parmetro 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 [ParmetrosDelFichero]
En el siguiente ejemplo, el fichero PRG1.BAT llama a PRG2.BAT. Cuando la ejecucin de
PRG2.BAT termina, continua PRG1.BAT en la siguiente lnea a Call.
Programa PRG1.BAT:
@echo off
echo lnea 1
call prg2.bat
echo lnea 4
echo lnea 5
Programa PRG2.BAT:
@echo off
echo lnea 2
echo lnea 3
Ejecucin:
C:\BATH>prg1
lnea 1
lnea 2
lnea 3
lnea 4
lnea 5
C:\BATH>
11-1 Introduccin
Este captulo est dedicado a la explicacin de varios ejemplos de ficheros por lotes. Este es un
captulo avanzado, pues comprende prcticamente toda la materia estudiada durante el curso.
Posiblemente necesite volver atrs en ms de una ocasin.
Normalmente los ficheros por lotes comprenden una serie de tareas que son tiles desde cualquier
directorio. Lo ms normal es crear un directorio dedicado exclusivamente a los ficheros por lotes:
en los ejemplos explicados se asume el directorio C:\BATH. Adems, debemos introducir el
directorio elegido en la ruta de acceso (variable PATH). De esta forma podemos ejecutar cualquier
fichero por lotes desde cualquier directorio del ordenador.
Como las demostraciones estudiadas a lo largo del captulo son relativamente largas, se recomienda
utilizar el Editor del ms-dos para la creacin y su posterior edicin.
El primer fichero objeto de estudio es el rey de los ficheros por lotes: el AUTOEXEC.BAT.
Seguidamente se estudian sus diferencias con el resto del conjunto de ficheros por lotes y se repasan
las rdenes ms usuales.
En el captulo destinado a las variables del entorno, advertimos que estas variables se guardan en la
memoria y se pierden al apagar el ordenador. La nica forma de tener unas variables del entorno
fijas (PATH, PROMPT, TEMP...) es definindolas en cada arranque del ordenador.
El fichero AUTOEXEC.BAT contiene adems rdenes para configurar el idioma del usuario.
Por ltimo, suele contener unas rdenes cuya misin es cargar programas residentes en memoria.
Estos programas quedarn almacenados en memoria hasta el apagado del ordenador. Se suelen
introducir como programas residentes un anti-virus, el programa Doskey y cualquier otro.
Por tanto, el fichero AUTOEXEC.BAT debe contener estos tres mdulos indispensables:
rdenes para configurar las variables del entorno (Set, Path y Prompt).
rdenes para seleccionar el idioma.
rdenes para instalar programas residentes.
El primer grupo de rdenes contiene la definicin de variables del entorno. Recuerde que las
variables PATH y PROMPT se pueden definir con la orden Set o con unas rdenes diseadas al
efecto llamadas igualmente Path y Prompt.
Orden
SET
PROMPT
SET PATH
SET TEMP
SET
DIRCMD
Significado
Define el smbolo del sistema.
Define la va de acceso.
Define el directorio para ficheros temporales.
Define cmo queremos ver el directorio (ordenacin, formato...).
Orden
SMARTDRV
MOUSE
SHARE
DOSKEY
VSAFE
Significado
Carga un programa de cach de disco (ver Captulo 13).
Carga el controlador del ratn (se suministra al adquirir un ratn).
Controla la comparticin de ficheros. Es requerido por algunas aplicaciones.
Instala el editor de rdenes y macros (ver Captulo 12).
Carga el anti-virus residente de ms-dos (ver Captulo 17).
Ejecucin:
C:\BATH>buscar perdido.*
C:\PERDIDO.TXT
C:\PRUEBA\PERDIDO.DBF
C:\TRABAJOS\PERDIDO.TXT
C:\BATH>
^Z
1 archivo(s) copiado(s)
C:\BATH>
@echo off
rem Autor: Saulo Barajas
rem Fecha: Agosto de 1995
rem Programa: RELOJ.BAT
rem Cometido: Mostrar la fecha y la hora actual en pantalla
if not exist c:\bath\reloj.txt goto Error
date <c:\bath\reloj.txt |find "actual"
time <c:\bath\reloj.txt |find "actual"
goto Final:
:Error
echo Falta el fichero RELOJ.TXT!
:Final
echo.
Ejecucin:
C:\BATH>reloj
La fecha actual es Mar 15/08/1995
La hora actual es 14:15:09,58
C:\BATH>
Ejecucin:
C:\WP60>programa
CV.EXE
INSTALL.BAT
MCV.EXE
QFIGENES.EXE
VAPINUL.COM
VMP.COM
WPINFO.EXE
WP.COM
WP.EXE
C:\WP60>
Este fichero por lotes necesita crear un fichero temporal para ir aadindole todos los ficheros con
extensiones COM, EXE o BAT. Este fichero temporal debe ser creado en el directorio destinado a
este fin (variable TEMP). Por tanto se crea otra variable llamada FICHTEMP que contiene el
nombre del fichero (TEMPORAL.TXT) y su trayectoria.
Si no se utilizase el directorio definido en la variable TEMP para crear el fichero TEMPORAL,
podra darse el caso de intentar escribir en un disquete protegido contra escritura y no poder
completarse la funcin del programa.
La primera lnea If crea el fichero temporal con el nombre de los ficheros con extensin COM. La
segunda lnea If aade al fichero temporal, aquellos ficheros con extensin EXE y la tercera lnea If
hace lo mismo con los ficheros BAT.
La orden Type muestra todos los programas (ahora grabados en el fichero TEMPORAL.TXT)
ordenados y por pantallas.
Finalmente, la orden Del borra el fichero temporal creado y la orden Set elimina la variable del
entorno creada.
Ejecucin:
C:\PRUEBA>borrar *.ini
A continuacin se recuerda el estado del directorio C:\BASURA
5 archivo(s) 27.238 bytes
C:\PRUEBA>
:Proceso
echo.
echo ** Inserte un nuevo disquete en A: Pulse Enter para proseguir
pause >nul
xcopy *.* a:\
if errorlevel
if errorlevel
if errorlevel
if errorlevel
/m
5 goto
4 goto
1 goto
0 goto
Error
Proceso
Error
FinCopia
echo.
echo No se pudo realizar la copia!
goto final
:FinCopia
echo.
echo El proceso de copia se complet con xito!
:Final
echo.
La primera lnea If detecta si el directorio actual est vaco produciendo un error. La orden Attrib
enciende el bit de archivar a todos los ficheros del directorio actual.
Seguidamente, COPIADIR.BAT pide un primer disquete en la unidad A:, luego comienza la copia
de todos los ficheros a la unidad A:. El parmetro /m desactiva el bit de archivar a los ficheros
copiados.
Las siguientes lneas If comprueban el resultado de la orden.
Las posibilidades son las siguientes: a) No hay suficiente espacio en el disco para copiar todos los
ficheros. En este caso, se pide otro disquete y se reanuda la copia donde se qued; b) Se presion
Ctrl+Pausa u ocurri un error de escritura en el disco. Se produce un mensaje y finaliza; c) La copia
fue correcta. Esto significa que todos los ficheros han podido copiarse en uno o ms disquetes y por
tanto, se ha cumplido el objetivo del programa.
Captulo 8
Redireccionamientos
8-1 Introduccin
Para comprender mejor el significado del redireccionamiento, intente responder primeramente las
siguientes preguntas.
1. Cuando el ordenador solicita informacin, qu dispositivo utiliza para recibirla?
2. Cuando el ordenador necesita presentar informacin, qu dispositivo emplea?
Las respuestas correctas son el teclado y el monitor respectivamente. En este captulo aprenderemos
a redirigir (cambiar) las entradas y salidas de las rdenes del ms-dos. El siguiente cuadro presenta la
entrada y la salida por defecto de las rdenes del dos.
Funcin
Dispositivo
CON (teclado)
CON (monitor)
Operador
Descripcin
Sintaxis
<
Redireccin de la entrada
orden <fichero/dispositivo
>
Redireccin de la salida
orden >fichero/dispositivo
>>
orden >>fichero
orden1 |orden2
More
Recibe como entrada un conjunto de caracteres organizados en filas y devuelve los mismos
caracteres insertando una pausa cada 23 lneas.
En muchas ocasiones la informacin mostrada por una orden o el contenido de un fichero no cabe
en una sola pantalla y los datos se desplazan a gran velocidad sin darnos tiempo a leerlos. La
utilidad de la orden More se encuentra en estas ocasiones, deteniendo el desplazamiento de
informacin en cada pantalla. Entonces, More muestra la siguiente lnea:
-- Ms --
Despus de leer los datos en pantalla, podemos pulsar Enter para continuar o tambin Ctrl+Pausa
para interrumpir.
Sort
Recibe como entrada un conjunto de caracteres organizados en filas y devuelve los mismos
caracteres ordenando cada fila alfabticamente.
El uso ms frecuente de este filtro es ordenar alfabticamente el contenido de un fichero. Admite
dos modificadores:
Modificador Descripcin
/R Ordena inversamente (de la `Z' a la `A' y del `9' al `0')
/+columna Indica la columna del carcter a partir del cual se comparar cada fila.
Find
Recibe como entrada un conjunto de caracteres organizados en filas y devuelve las filas que
contengan una cadena determinada.
La cadena de caracteres para buscar debe especificarse entre comillas (Mays+2) despus de la
orden.
Se utiliza, a menudo, para buscar una cadena de caracteres en un fichero o en la salida de una
orden. El filtro Find distingue entre maysculas y minsculas mientras no le especifiquemos el
modificador /I entre la orden y la cadena.
FIND "cadena" (cadena es diferente que CADENA)
FIND /I "cadena" (cadena es lo mismo que CADENA)
A:\>more <recuerdo.txt
A:\>sort <personal.txt
(Find considera como entrada el fichero PERSONAL.TXT y muestra por pantalla todas las filas
que contienen la cadena JIMENEZ)
Ejercicios de autocomprobacin
1. Indique las rdenes necesarias para:
a) Mostrar el fichero CRONICA.TXT con pausa en cada pantalla.
b) Mostrar el fichero AVISO.TXT con pausa en cada pantalla.
c) Ordenar el fichero NUMEROS.TXT alfabticamente.
d) Ordenar el fichero LISTIN.TXT alfabticamente a partir de la columna 30.
e) Ordenar el fichero AMIGOS.TXT inversamente.
f) Buscar la cadena "IGNACIO" en el fichero PERSONAL.TXT
2. Si no utilizamos el operador `<', cul es el dispositivo de entrada por defecto?
El operador `>' tambin se puede combinar con los filtros del dos. Veamos algunas aplicaciones:
B:\>sort >amigos.txt
(Sort asume como entrada el fichero LISTIN1.TXT y como salida, el fichero LISTIN2.TXT)
Ejercicios de autocomprobacin
3. Indique la entrada y la salida de las siguientes lneas de rdenes.
a) DATE <DIA.TXT
b) TIME <HORA.TXT
c) TYPE ROMANCE.TXT
d) TYPE ROMANCE.TXT >CON
e) DIR >DIRECTOR.TXT
f) DIR >PRN
g) SORT
h) SORT <DESORDEN.TXT
i) SORT <DESORDEN.TXT >ORDEN.TXT
j) SORT <DESORDEN.TXT >PRN
k) FIND "HARINA" <COMPRA.TXT
l) FIND "HARINA" <COMPRA.TXT >HARINA.TXT
m) MORE <AVISO.TXT
La siguiente aade al fichero SOS.TXT la ayuda suministrada por ms-dos para la orden Date.
A:\>date /? >>sos.txt
Si ahora visualizamos el fichero SOS.TXT, comprobamos que contiene la ayuda de ambas rdenes.
A:\>type sos.txt
Muestra o establece la hora del sistema.
TIME [hora]
Escriba TIME sin parmetros para consultar o cambiar la hora actual.
Presione ENTRAR para conservar la misma hora.
Presenta o establece la fecha.
DATE [dd-mm-aa]
dd-mm-aa Establece la fecha que se especifique.
Escriba DATE sin parmetros para ver la fecha actual y poder escribir una nueva.
Presione ENTRAR para conservar la misma fecha.
D:\>
Ejercicios de autocomprobacin
4. Escribir las rdenes necesarias para:
a) Mostrar el fichero INFORME.TXT con pausa en cada pantalla.
b) Imprimir el fichero INFORME.TXT en la impresora.
c) Ordenar el texto introducido por el teclado en la impresora.
d) Aadir la etiqueta y el nmero de serie de la unidad actual (orden Vol) al fichero VARIOS.TXT
e) Aadir el directorio actual al fichero VARIOS.TXT
C:\>tree |more
TEMP=C:\DOS
Ejercicios de autocomprobacin
5. Entre las siguientes lneas de rdenes, agrupar por parejas las que hagan lo mismo.
a) COPY EJEMPLO.TXT PRN
b) TYPE EJEMPLO.TXT |MORE
c) TYPE EJEMPLO.TXT >PRN
d) COPY EJEMPLO.TXT CON
e) DIR /P
f) MORE <EJEMPLO.TXT
g) TYPE EJEMPLO.TXT
h) DIR |MORE
i) DESORDEN.TXT ORDEN.TXT
j) DESORDEN.TXT impresora
k) COMPRA.TXT monitor
l) COMPRA.TXT HARINA.TXT
m) AVISO.TXT monitor
4. a) MORE <INFORME.TXT
b) TYPE INFORME.TXT >PRN
c) SORT >PRN
d) VOL >>VARIOS.TXT
e) DIR >>VARIOS.TXT
5. a) y c) Imprimir EJEMPLO.TXT
b) y f) Mostrar con pausa en cada pantalla EJEMPLO.TXT
d) y g) Visualizar EJEMPLO.TXT
e) y h) Mostrar el directorio actual con pausa en cada pantalla.
Puesta en prctica
Vamos a seguir los siguientes pasos:
1. Crear un fichero llamado AMIGOS1.TXT que contenga los siguientes datos. (Las dos
primeras lneas no debe crearlas en el fichero: estn para introducir las columnas
correctamente).
0
10
20
30
40
12345678901234567890123456789012345678901234567
Ismael
Caballero
Valladolid
7986821
Mara
Lpez
Crdoba
4568756
Sonia
Aguilar
Valladolid
1239083
Juan
Ramrez
Crdoba
7643434
Laura
Daz
Crdoba
4221336
Enrique
Ortiz
Burgos
3423444
Mnica
Carrasco
Madrid
1234123
Cristina
Reyes
Madrid
3344334
2.
3.
4.
5.
6.
Resolucin en el ordenador:
7986821
4568756
1239083
7643434
4221336
3423444
1234123
3344334
4568756
7643434
4221336
3344334
3423444
4221336
4568756
7643434
1234123
3344334
1239083
7986821
1239083
7986821
1234123
4221336
4568756
3423444
7643434
3344334
8344621
4352359
Caballero
Lpez
Aguilar
Ramrez
Daz
Ortiz
Carrasco
Reyes
Valladolid
Crdoba
Valladolid
Crdoba
Crdoba
Burgos
Madrid
Madrid
7986821
4568756
1239083
7643434
4221336
3423444
1234123
3344334
Antonio
Juan
Lpez
Moreno
Alicante
Alicante
8344621
4352359
Antonio
Cristina
Enrique
Ismael
Juan
Juan
Laura
Mara
Mnica
Sonia
Lpez
Reyes
Ortiz
Caballero
Moreno
Ramrez
Daz
Lpez
Carrasco
Aguilar
A:\>del amigos?.txt
A:\>
Alicante
Madrid
Burgos
Valladolid
Alicante
Crdoba
Crdoba
Crdoba
Madrid
Valladolid
8344621
3344334
3423444
7986821
4352359
7643434
4221336
4568756
1234123
1239083