25
FICHEROS X LOTES II

Tema 10. Ficheros Por Lotes Ii

Embed Size (px)

Citation preview

Page 1: Tema 10. Ficheros Por Lotes Ii

FICHEROS X LOTES II

Page 2: Tema 10. Ficheros Por Lotes Ii

AUTOEXEC.BAT Como cualquier fichero por lotes, el AUTOEXEC.BAT posee las mismas características que los demás: lleva extensión BAT, contiene órdenes, se puede ejecutar introduciendo su nombre después del símbolo del sistema y se interrumpe su funcionamiento si pulsamos Ctrl+Pausa. Además se añaden tres características exclusivas:

Tiene un nombre y extensión obligatorias: siempre debe llamarse AUTOEXEC.BAT Se ejecuta cada vez que arranca el ordenador. Si no existe, ms-dos hace funcionar a tres órdenes en su lugar: Date, Time y Ver. Debe residir en el directorio raíz de la unidad de arranque. Por ejemplo, si arrancamos con el disco duro _es lo más normal_ se buscará el fichero AUTOEXEC.BAT en su directorio raíz y luego, se ejecutará.

Page 3: Tema 10. Ficheros Por Lotes Ii

En los ejercicios hemos visto que las variables de entorno como el prompt 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 definiéndolas en cada arranque del ordenador.

El fichero AUTOEXEC.BAT contiene además órdenes para configurar el idioma del usuario.

Por último, suele contener unas órdenes cuya misión es cargar programas residentes en memoria. Estos programas quedarán almacenados en memoria hasta el apagado del ordenador. Se suelen introducir como programas residentes un anti-virus, el programa Doskey y cualquier otro.

Page 4: Tema 10. Ficheros Por Lotes Ii

Por tanto, el fichero AUTOEXEC.BAT debe contener estos tres módulos indispensables:

• Órdenes para configurar las variables del entorno (Set, Path y Prompt). • Órdenes para seleccionar el idioma. • Órdenes para instalar programas residentes.

Page 5: Tema 10. Ficheros Por Lotes Ii

@ECHO OFFSET PROMPT=$P$GSET PATH=C:\DOS;C:\BATH;C:\WINDOWSSET TEMP=C:\DOS\TEMPSET DIRCMD=/O:GEN

MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI)MODE CON CODEPAGE SELECT=850C:\DOS\KEYB SP,,C:\DOS\KEYBOARD.SYS

C:\DOS\SMARTDRV.EXEC:\DOS\DRIVERS\MOUSE.COMC:\DOS\SHARE.EXE /L:500 /F:5100C:\DOS\DOSKEY /INSERTC:\DOS\VSAFE

Ejemplo de un fichero AUTOEXEC.BAT

Page 6: Tema 10. Ficheros Por Lotes Ii

El primer grupo de órdenes contiene la definición de variables del entorno. Recordamos que las variables PATH y PROMPT se pueden definir con la orden Set o con unas órdenes diseñadas al efecto llamadas igualmente Path y Prompt.

SET PROMPT=$P$GSET PATH=C:\DOS;C:\BATH;C:\WINDOWSSET TEMP=C:\DOS\TEMPSET DIRCMD=/O:GEN

Page 7: Tema 10. Ficheros Por Lotes Ii

Orden Significado SET PROMPT Define el símbolo del sistema. SET PATH Define la vía de acceso. SET TEMP Define el directorio para ficheros temporales. SET DIRCMD Define cómo queremos ver el directorio (ordenación, formato...).

Page 8: Tema 10. Ficheros Por Lotes Ii

El segundo grupo de órdenes entre otras cosas definen el español como idioma.

MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI)MODE CON CODEPAGE SELECT=850C:\DOS\KEYB SP,,C:\DOS\KEYBOARD.SYS

Page 9: Tema 10. Ficheros Por Lotes Ii

El tercer grupo de órdenes cargan en memoria programas residentes. Aunque suele ser suficiente poner el nombre de la orden a secas, es habitual añadir la trayectoria del fichero delante de su nombre y la extensión detrás: de esta forma no hay confusión posible. A continuación se colocan los parámetros.

C:\DOS\SMARTDRV.EXEC:\DOS\DRIVERS\MOUSE.COMC:\DOS\SHARE.EXE /L:500 /F:5100C:\DOS\DOSKEY /INSERTC:\DOS\VSAFE

Page 10: Tema 10. Ficheros Por Lotes Ii

Orden Significado SMARTDRV Carga un programa de caché de discoMOUSE Carga el controlador del ratónSHARE Controla la compartición de ficheros. Es requerido por algunas aplicaciones. DOSKEY Instala el editor de órdenes y macrosVSAFE Carga el anti-virus residente de ms-dos

Page 11: Tema 10. Ficheros Por Lotes Ii

Ejemplo RELOJ.BAT

Para que funcione este ejemplo vamos a crear con EDIT un fichero que tenga dos retornos de carro (dos intro o enter) que se llame reloj.txt

Page 12: Tema 10. Ficheros Por Lotes Ii

Ejemplo RELOJ.BAT

@echo offrem Programa: RELOJ.BATrem Cometido: Mostrar la fecha y la hora actual en pantalla

if not exist c:\bath\reloj.txt goto Errordate <c:\bath\reloj.txt |find "actual"time <c:\bath\reloj.txt |find "actual"goto Final:

:Errorecho ¡Falta el fichero RELOJ.TXT!

:Finalecho.

Programa:

Page 13: Tema 10. Ficheros Por Lotes Ii

Ejecución: C:\BATH>relojLa fecha actual es Mar 15/08/1995La hora actual es 14:15:09,58

C:\BATH>

Si el fichero existe, se ejecutan las órdenes Date y Time.

El operador `<' hace que la entrada de la orden sea el fichero RELOJ.TXT y como tiene un INTRO no nos pedirá nada por teclado y el filtro Find hace aparecer la línea que contiene la palabra actual.

Page 14: Tema 10. Ficheros Por Lotes Ii

Ejemplo PROGRAMA.BAT @echo offrem Programa: PROGRAMA.BATrem Cometido: Visualizar ordenados y con pausa en cadarem pantalla todos los ficheros ejecutables delrem directorio actual.

set fichtemp=%temp%\temporal.txt

if exist *.com dir *.com /b >%fichtemp%if exist *.exe dir *.exe /b >>%fichtemp%if exist *.bat dir *.bat /b >>%fichtemp%

type %fichtemp% |sort |moredel %fichtemp%set fichtemp=echo.

Page 15: Tema 10. Ficheros Por Lotes Ii

C:\WP60>programa

CV.EXEINSTALL.BATMCV.EXEQFIGENES.EXEVAPINUL.COMVMP.COMWPINFO.EXEWP.COMWP.EXE

C:\WP60>

Ejecución:

Page 16: Tema 10. Ficheros Por Lotes Ii

Este fichero por lotes necesita crear un fichero temporal para ir añadiéndole 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, podría darse el caso de intentar escribir en un disquete protegido contra escritura y no poder completarse la función del programa. La primera línea If crea el fichero temporal con el nombre de los ficheros con extensión COM. La segunda línea If añade al fichero temporal, aquellos ficheros con extensión EXE y la tercera línea 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.

Page 17: Tema 10. Ficheros Por Lotes Ii

Ejemplo : BORRAR.BAT

Este fichero por lotes, desplaza un fichero o grupo de ficheros a un directorio llamado C:\BASURA. De esta forma, si luego necesitamos recuperar un fichero borrado, sólo hará falta buscarlo en el directorio C:\BASURA. Sin embargo, esto tiene un problema: el directorio C:\BASURA crecerá y crecerá de tamaño llenando nuestro disco duro de ficheros inservibles. Por tanto, es necesario eliminar periódicamente el contenido de este directorio.

Escribe en tu cuaderno de prácticas que hace la orden Undelete.

Page 18: Tema 10. Ficheros Por Lotes Ii

@echo offrem Programa: BORRAR.BATrem Cometido: Mueve el fichero o grupo de ficheros especificados a un rem directorio llamado C:\BASURA. Si no existe, lo crea.

if "%1"=="" goto Errorif not exist %1 goto Error

xcopy %1 c:\basura\ >nulif errorlevel 1 goto Errordel %1

echo A continuación se recuerda el estado del directorio C:\BASURADIR C:\BASURA |FIND "archivo(s)"

goto Final

:Errorecho ¡No se pudo borrar %1!

:Finalecho.

Page 19: Tema 10. Ficheros Por Lotes Ii

C:\PRUEBA>borrar *.ini

A continuación se recuerda el estado del directorio C:\BASURA5 archivo(s) 27.238 bytes

C:\PRUEBA>

Ejecución:

Page 20: Tema 10. Ficheros Por Lotes Ii

La primera orden If detecta si no se ha introducido ningún parámetro, produciendo un aviso en este caso. La segunda orden If comprueba que el fichero para borrar exista, si no es así dará un mensaje de error.

La orden Xcopy mueve el fichero o ficheros especificados como parámetros al directorio C:\BASURA. La barra inclinada invertida detrás de BASURA se emplea para informar a Xcopy que BASURA es un directorio y no un fichero. Si el directorio no existe, Xcopy sabrá que es un directorio y lo creará automáticamente. La salida de la orden se ha redireccionado al dispositivo ficticio NUL. De esta forma, no aparecerá ningún mensaje producido por la orden en la pantalla.

Page 21: Tema 10. Ficheros Por Lotes Ii

La siguiente línea If comprueba el código de salida. Si se ha producido un error en la copia de los ficheros, los ficheros no se borrarán. Esto es una medida de seguridad para evitar la desaparición definitiva de los ficheros.

La orden Del borra los ficheros del directorio actual. Ya hemos mencionado el problema de este fichero por lotes. Como solución, se informa al usuario del número de ficheros y los bytes ocupados por todos ellos en el directorio C:\BASURA. De esta forma el usuario sabrá si debe borrar con la orden Del los ficheros del directorio BASURA.

Page 22: Tema 10. Ficheros Por Lotes Ii

EJERCICIO(cuaderno de prácticas) Modifica el programa anterior para que

introduciendo el parámetro “borrar” el programa borre el contenido del directorio c:\basura

Page 23: Tema 10. Ficheros Por Lotes Ii

Ejemplo : COPIADIR.BAT

@echo offecho Este programa copia todos los ficheros echo del directorio actual a la unidad A:echo (si no cabe en un sólo disquete echo, se pedirán más)

if not exist *.* goto Errorattrib +a *.*

:Procesoecho.echo ** Inserte un nuevo disquete en A: Pulse Enter para proseguirpause >nul

xcopy *.* a:\ /mif errorlevel 5 goto Errorif errorlevel 4 goto Procesoif errorlevel 1 goto Errorif errorlevel 0 goto FinCopia

echo.echo ¡No se pudo realizar la copia!goto final

:FinCopiaecho.echo ¡El proceso de copia se echo completó con éxito!

:Finalecho.

Page 24: Tema 10. Ficheros Por Lotes Ii

EJERCICIO (cuaderno de practicas) Modifica el programa anterior para que

solo copie el contenido en un disquete, en el caso de que tenga que copiar mas de uno mostrará el mensaje “DISCO LLENO”

Page 25: Tema 10. Ficheros Por Lotes Ii

La primera línea If detecta si el directorio actual está vacío 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 parámetro /m desactiva el bit de archivar a los ficheros copiados. Las siguientes líneas 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 más disquetes y por tanto, se ha cumplido el objetivo del programa.