Ficheros Por Lotes

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 17

FICHEROS POR LOTES

Tabla de contenido

1. Introducción ............................................................................................................................................... 2

2. Concepto de fichero por lotes ............................................................................................................ 2

3. La orden ECHO.......................................................................................................................................... 3

4. La orden REM ............................................................................................................................................ 5

5. Gestión de parámetros .......................................................................................................................... 5

6. La orden PAUSE ........................................................................................................................................ 6

7. La orden GOTO ......................................................................................................................................... 7

8. La orden IF .................................................................................................................................................. 8

IF EXIST fichero orden ............................................................................................................................ 9

IF “cadena1”==”cadena2” orden ..................................................................................................... 10

IF ERRORLEVEL número orden.......................................................................................................... 11

9. Las variables de entorno ..................................................................................................................... 12

10. La orden SET /P variable=[cadena de texto] ............................................................................. 12

11. La orden FOR ........................................................................................................................................ 14

12. La orden SHIFT ..................................................................................................................................... 15

13. La orden CALL ....................................................................................................................................... 16


UT1. Uso de Scripts Windows. Ficheros por lotes

1. Introducción

En muchas ocasiones los usuarios repiten una determinada secuencia de órdenes día tras
día, suponiendo una tarea bastante molesta e incómoda.

Los ficheros por lotes pretenden automatizar una tarea rutinaria ejecutando una
serie de órdenes definidas con antelación.

2. Concepto de fichero por lotes

Un fichero por lotes es un fichero ASCII que contiene una serie de órdenes

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:\>copy con tiempo.bat


date
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:\>tiempo

C:\>date
La fecha actual es Mar 15/03/2018
Escriba la nueva fecha (dd-mm-aa):

C:\>time
La hora actual es 11:53:54,12
Escriba la nueva hora:

C:\>

Todos los ficheros por lotes poseen unas características comunes:

• Extensión. Todos deben llevar obligatoriamente la extensión BAT.


• Contenido. Son ficheros de texto ASCII y, por consiguiente, pueden ser creados
por Copy o Edit. Cada línea del fichero debe poseer una orden.
• Ejecución. 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.
• Interrupción. Podemos detener el procesamiento del fichero por lotes en
cualquier momento presionando Ctrl+C o Ctrl+Pausa.
Página 2
UT1. Uso de Scripts Windows. Ficheros por lotes

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

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.

Set /P Imprime un mensaje y pide un valor que se almacenará en una variable.

For Repite una misma orden en un conjunto de ficheros.

Call Llama a un fichero por lotes desde otro.

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.

%* Toda la cadena de parámetros de entrada

%variable% Variable del entorno.

%%variable Variable de la orden For.

3. La orden ECHO

Se puede utilizar de cinco formas:

Página 3
UT1. Uso de Scripts Windows. Ficheros por lotes

ECHO Indica si está activado o desactivado el eco de las órdenes.

ECHO ON Activa el eco

ECHO OFF Desactiva el eco

ECHO
Visualiza un mensaje en pantalla.
mensaje

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:\>tiempo

C:\>echo off
La fecha actual es Mar 15/03/2018
Escriba la nueva fecha (dd-mm-aa):
La hora actual es 11:53:54,12
Escriba la nueva hora:

Programa:

@echo off
date
time

Ejecución:

C:\>tiempo
La fecha actual es Mar 15/03/2018
Escriba la nueva fecha (dd-mm-aa):

Página 4
UT1. Uso de Scripts Windows. Ficheros por lotes

La hora actual es 11:53:54,12


Escriba la nueva hora:

La orden Echo también permite mostrar mensajes al usuario. 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:\>tiempo
Este es el fichero TIEMPO.BAT
La fecha actual es Mar 15/03/2018
Escriba la nueva fecha (dd-mm-aa):
La hora actual es 12:10:22,72
Escriba la nueva hora:

4. 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

5. 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 WINDOWS 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.

Página 5
UT1. Uso de Scripts Windows. Ficheros por lotes

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.

Para referirnos a un parámetro en un proceso por lotes, debemos escribir el signo de


porcentaje (%) seguido del número de parámetro. De esta forma se pueden gestionar
hasta nueve parámetros (del %1 al %9). Si se necesitan gestionar más parámetros,
habrá que hacer uso del comando SHIFT (ver más adelante).

El siguiente ejemplo copia 3 ficheros introducidos como parámetros al disquete de la


unidad B:

Programa:

@echo off
rem 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

6. La orden PAUSE

Detiene temporalmente el desarrollo de un programa.

Cuando CMD.EXE 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+C y así, interrumpir el desarrollo del fichero.

Presione cualquier tecla para continuar . . .

Página 6
UT1. Uso de Scripts Windows. Ficheros por lotes

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

7. 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:

Microsoft Windows XP [Versión 5.1.2600]

En este ejemplo, la orden Vol nunca se ejecutará: al llegar la orden GOTO FINAL,
CMD.EXE salta hasta la etiqueta :Final y termina el fichero porque no hay más líneas.

Página 7
UT1. Uso de Scripts Windows. Ficheros por lotes

8. 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 NOT EXIST fichero orden Si no existe el fichero se ejecuta la orden.

IF “cadena1”==”cadena2” orden Si ambas cadenas son iguales se ejecuta 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 igual o

superior al número, se ejecuta la orden.

IF NOT ERRORLEVEL número orden Si el código de salida del último programa es inferior

al número, se ejecuta la orden.

Sintaxis para más de una instrucción:

IF condición ( Ojo: el “(“ debe estar en la misma línea del IF


Orden1
Orden 2

)

Sintaxis con instrucciones alternativas (SINO …):

IF condición (orden) ELSE (


Orden1
Orden 2

)
Importante: el ELSE debe estar en la misma línea que el IF, por lo
tanto, solo se puede escribir una orden en caso de condición verdadera.

Página 8
UT1. Uso de Scripts Windows. Ficheros por lotes

Si necesitáramos ejecutar más de una orden, habría que usar un GOTO


etiqueta. Además, la orden anterior a ELSE debe ir entre paréntesis.

Cualquier condición se puede negar con NOT delante de la condición.

IF EXIST fichero orden

Ejecuta la orden sólo si existe el fichero especificado.

Suponga el siguiente fichero por lotes:

@echo off
del %1

Si ahora lo hacemos funcionar introduciendo como parámetro un fichero inexistente,


CMD.EXE tomará el control y dará su correspondiente mensaje de error.

Hay que evitar esos mensajes de error, introduciendo nosotros mensajes personalizados.

Ese proceso por lotes resultaría más correcto con 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.

Página 9
UT1. Uso de Scripts Windows. Ficheros por lotes

IF “cadena1”==”cadena2” orden

Compara las dos cadenas y ejecuta la orden si son iguales.

En el ejemplo anterior, 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, CMD.EXE 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.

Si queremos que ignore entre mayúsculas y minúsculas, se debe usar el parámetro /I

IF /I “cadena1”==”cadena2” orden

Ejercicio: crear un fichero por lotes llamado ordena.bat que reciba un fichero y una de
las palabras siguientes: ASC o DESC. El programa debe ordenar ese fichero dado
(comando SORT), en orden ascendente o descendente, según indique el usuario. Se
debe comprobar que exista el fichero y en caso contrario, informar al usuario.

Una mejora sería permitir también las palabras asc y desc (en minúsculas) y si se
introduce cualquier otra palabra, informar al usuario de las únicas palabras válidas.

Para comparaciones numéricas, se pueden usar los siguientes operadores:


• EQU – equivalente a ==

• NEQ – no igual.

• LSS – menor

• LEQ – menor o igual

• GTR – mayor

• GEQ – mayor o igual.

Ejemplo: IF %1 LSS 5 (echo “Suspenso”) ELSE (echo “Aprobado”)

Página 10
UT1. Uso de Scripts Windows. Ficheros por lotes

IF ERRORLEVEL número orden

Cada orden externa de WINDOWS 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 el


disco, se introdujo un nombre de unidad no válida o se utilizó una
sintaxis 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
informar 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

Página 11
UT1. Uso de Scripts Windows. Ficheros por lotes

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 orden

Esta compleja línea se traduce así: «Si el código de salida es 5 o superior pero inferior a 6
ejecutar orden», es decir, si el código es 5 ejecutar orden.

9. Las variables de entorno

Se puede recuperar el valor de una determinada variable de 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:

IF "%TEMP%"=="" SET TEMP=C:\DOS

Como se puede ver en el ejemplo, se asigna valor a una variable de entorno con la
orden SET.

10. La orden SET /P variable=[cadena de texto]

Imprime el mensaje “cadena de texto” y pide un valor por pantalla que se


almacenará en la variable “variable”.

Este es otro uso de la orden set, que ya sabemos que también se usa para ver las
variables de entorno del sistema y para definirlas.

Página 12
UT1. Uso de Scripts Windows. Ficheros por lotes

Su sintaxis es:

SET /P variable=[cadena de texto]

El /P es lo que permite almacenar el valor en la variable.

Ejemplo: podemos mejorar mucho un programa si cambiamos las órdenes Pause por
órdenes SET /P.

@echo off
rem Programa: DEMOB.BAT
echo ********************************************
echo ** Este programa copia todos los ficheros **
echo ** de la unidad A: al directorio actual **
echo ********************************************
set /p opcion=”¿Desea continuar S-N?”
if “%opcion%”==”N” goto Final

:Proceso
copy a:\ .
set /p opcion=”Para continuar con otro disquete pulse C y para
finalizar, F “
if “%opcion%”==”C” goto proceso

:Final

Con la orden SET /P y de una forma muy sencilla podemos crear menús con diferentes
opciones:

@echo off
rem Programa: UTIL.BAT
:Menu
cls
echo UTILIDADES
echo ----------
echo.
echo C. Chequear
echo D. Defragmentar
echo E. Editor
echo S. Salir
echo.

set /p opcion=”¿Qué utilidad desea comenzar? C-D-E-S”


if “%opcion%”==”S” goto Salir
if “%opcion%”==”E” goto Editor
if “%opcion%”==”D” goto Defrag
if “%opcion%”==”C” goto Chequear

Goto Salir

Página 13
UT1. Uso de Scripts Windows. Ficheros por lotes

:Chequear
chkdsk
goto Menu
:Defrag
DEFRAG c:
goto Menu
:Editor
EDIT
goto Menu
:Salir
echo.

Ejercicio: modificar el fichero por lotes ordena.bat para que se llame ordena2.bat y que
después de comprobar que el fichero a ordenar exista, pregunte al Usuario lo siguiente:

¿Orden Ascendente(A) o Descendente(D)?

Y en función de la opción pulsada por el usuario, ordenar el fichero adecuadamente. Si el


usuario pulsa cualquier otra tecla que no sea A o D (válidas también en minúsculas), se
debe informar de los valores posibles.

11. 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 valores. En ella, se pueden establecer varios valores 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.

Página 14
UT1. Uso de Scripts Windows. Ficheros por lotes

Si necesitamos ejecutar varias órdenes dentro del FOR, la sintaxis es la siguiente:

FOR %%variable IN (conjunto) DO (


orden 1
orden 2

)

Hay una variante que permite que inicializar una variable y que se vaya incrementado
su valor hasta un límite dado. La sintaxis sería esta:

FOR /L %%X IN (valor_inicial, incremento, valor_final) DO orden

Ejemplo: mostrar los números del 1 al 100

FOR /L %%X IN (1,1,100) DO ECHO %%X

Ejercicio: crear un fichero por lotes llamado mostrar.bat que reciba una serie de
ficheros como parámetros y con un bucle FOR muestre el contenido de cada uno de
ellos.

12. La orden SHIFT

Se utiliza principalmente para gestionar más de 9 parámetros de un proceso por lotes.

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

Página 15
UT1. Uso de Scripts Windows. Ficheros por lotes

Ejecución:

C:\>demo2 juan maria alberto


El parámetro 1 es juan
El parámetro 2 es maria
El parámetro 3 es alberto
C:\>

13. 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:\>prg1
línea 1
línea 2
línea 3
línea 4
línea 5
C:\>

Ejercicio: se hará en dos pasos:

1. Crear un fichero por lotes llamado cat.bat que reciba un fichero como parámetro
y muestre su contenido por pantalla. Este fichero por lotes se usará a
continuación.

Página 16
UT1. Uso de Scripts Windows. Ficheros por lotes

2. Crear un fichero por lotes llamado menu.bat que reciba un fichero como
parámetro y que muestre el siguiente menú:

MENU
1. Listar
2. Ordenar

A continuación, debe preguntar qué opción ejecutar, y en función de ella, llamar


al fichero por lotes cat.bat o al fichero por lotes ordena.bat (creado en ejercicios
anteriores) pasándoles como parámetro el parámetro de menu.bat.

3. Una mejora consistiría en llamar a menú.bat sin parámetros, y que se pregunte al


usuario qué fichero quiere listar u ordenar.

Página 17

También podría gustarte