Вы находитесь на странице: 1из 25

Ficheros por lotes (I)

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

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 confeccin podemos utilizar la orden Copy o el programa Edit.
C:\BATH>copy con tiempo.bat date time ^Z 1 archivo(s) copiado(s)

Si ahora ejecutamos el fichero recin 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>time La hora actual es 0:53:54,12 Escriba la nueva hora: C:\BATH>

Todos los ficheros por lotes poseen unas caractersticas comunes:

Extensin. Todos deben llevar obligatoriamente la extensin BAT. Contenido. Son ficheros de texto ASCII y, por consiguiente, pueden ser creados por Copy o Edit. Cada lnea del fichero debe poseer una orden. Ejecucin. Para hacerlo funcionar simplemente debemos teclear su nombre a continuacin del smbolo del sistema. El fichero por lotes tomar entonces el control del ordenador. Interrupcin. Podemos detener el procesamiento del fichero por lotes en cualquier momento presionando Ctrl+Pausa.

Todas las rdenes admitidas despus del smbolo del sistema pueden introducirse tambin en un fichero por lotes. Adems, existen una serie de rdenes diseadas especficamente para estos ficheros:

Orden Echo Rem Pause Goto If Choice For Call Shift

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. Desplaza el valor de los parmetros.

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.

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 Visualiza un mensaje en pantalla. mensaje ECHO. Visualiza una lnea 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 aadirle la lnea ECHO OFF para desactivar el eco en lo sucesivo. Para eliminar el eco de la propia orden ECHO OFF se antepone el smbolo arroba (@) al nombre de la orden. Vemoslo ms claro en los ejemplos siguientes. Programa:
echo off date time

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

Ejecucin:
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 tambin 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

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

La orden REM
Permite introducir comentarios internos en el cdigo de un fichero por lotes. Las lneas precedidas por la palabra Rem sern ignoradas durante el funcionamiento del fichero por lotes. Se suele utilizar esta orden para introducir aclaraciones en el cdigo del fichero. Objetivo: facilitar su lectura y correccin 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

Ejercicios de autocomprobacin
1. Indique la diferencia entre las siguientes rdenes:

ECHO Ficheros por lotes REM Ficheros por lotes

Gestin de parmetros
Los parmetros son informaciones adicionales colocadas detrs del nombre de una orden. Si la mayora de las rdenes de ms-dos admiten parmetros, tambin ser posible gestionar parmetros en los ficheros por lotes. Vamos a confeccionar un fichero por lotes que borre dos ficheros introducidos como parmetros. Programa:
@echo off rem Programa: BORRA2.BAT del %1 del %2

Ejecucin:
A:\>borra2 juan.txt maria.txt

En la lnea de rdenes, cada parmetro 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 parmetro introducido en la lnea de rdenes del programa, debemos escribir el signo de porcentaje (%) seguido del nmero de parmetro. El siguiente ejemplo copia los ficheros introducidos como parmetros al disquete de la unidad B: Programa:
@echo off rem Programa: COPIAB.BAT echo Se estn copiando los ficheros %1, %2 y %3 a la unidad B: copy %1 b:\ copy %2 b:\ copy %3 b:\

Ejecucin:
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. Tambin podemos presionar Ctrl+Pausa y as, interrumpir el desarrollo del fichero.
Presione cualquier tecla para continuar . . .

Para mejorar la presentacin, podemos insertar un mensaje indicando el motivo de la detencin 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

Ejercicios de autocomprobacin
2. Qu hace la orden PAUSE >NUL ? 3. Escriba un fichero de procesamiento por lotes que pida un disco en la unidad A: antes de mostrar su directorio raz.

La orden GOTO
Normalmente un fichero por lotes se desarrolla secuencialmente, desde la primera lnea hasta la ltima. Sin embargo, la orden Goto permite desviar la ejecucin del programa hasta una etiqueta especificada como parmetro. 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 idntica a `BALANCE_DE_ENERO'. El siguiente ejemplo muestra cmo se usan las etiquetas: Programa:
@echo off ver goto Final vol :Final

Ejecucin:
Versin MS-DOS 6.22

En este ejemplo, la orden Vol nunca se ejecutar: al llegar la orden GOTO FINAL, msdos salta hasta la etiqueta :Final y termina el fichero porque no hay ms lneas. 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 raz 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 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

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

Si existe el fichero se ejecuta la orden. Si no existe el fichero se ejecuta la orden. Si ambas cadenas son iguales se ejecuta la orden. Si ambas cadenas son diferentes se ejecuta la orden. Si el cdigo de salida del ltimo programa es igual o superior al Si el cdigo de salida del ltimo programa es inferior al nmero

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

La primera lnea If avisa si no se ha introducido ningn parmetro. La segunda lnea nicamente borrar el primer parmetro si se ha introducido. La tercera lnea hace lo mismo pero con el segundo parmetro.

IF ERRORLEVEL
Cada orden externa de ms-dos genera un cdigo de salida a su trmino indicando si pudo realizarse satisfactoriamente. Generalmente un cdigo de salida 0 indica que no hubo ningn problema y un cdigo 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 cdigo de salida es igual o superior al especificado detrs de ERRORLEVEL. A modo de ejemplo tenemos a continuacin los cdigos de salida de Xcopy:

Cdigo 0 1 2 4

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. 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 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 ejemplo- podemos 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.

MEJORAS en el IF
Cuando las extensiones de comando estn habilitadas, IF tiene mayor funcionalidad: a) Podemos preguntar por la existencia de variables:
IF DEFINED variable comando C:\sirio>set x=25 C:\sirio>if defined x echo Ya existe la variable x, su valor es %x% Ya existe la variable x, su valor es 25

b) Y realizar comparaciones lgicas, diferentes a la igualdad:


IF [/I] cadena1 op-log cadena2 comando Los operadores lgicos admitidos son: EQU - igual NEQ - no igual LSS - menor que LEQ - menor que o igual GTR - mayor que GEQ - mayor que o igual /I indica que la comparacin se har case insensitive (ignora la diferencia entre MAYs y mins)

c) Ahora el IF admite ms de un comando, el grupo de comandos debemos encerrarlo entre parntesis. Tambin admite la clusula (opcional) ELSE:
IF expr-lgica ( - sentenciaS TRUE ) ELSE ( por algn espacio - sentenciaS FALSE ) C:\>set a=Andorra C:\>set b=Barcelona C:\>IF a LSS b (echo %a% %b%) ELSE (echo %b% %a%) Andorra Barcelona Expansin retardada de variables

<-- separa ELSE de los parntesis

Las variables comprendidas entre los parntesis las expande en el momento de la llegada al IF: antes de ejecutar ninguna de las instrucciones interiores. En el siguiente programa:
@echo off

set VAR=basura echo antes del IF: %VAR% IF DEFINED VAR ( set VAR=CHATARRA echo en el IF: %VAR% ) echo despus del IF: %VAR%

su ejecucin nos dara un resultado un tanto sorprendente:


C:\prueba>prog antes del IF: basura en el IF: basura Pero si ya he cambiado el valor de la variable !! despus del IF: CHATARRA

La solucin a este problema es utilizar lo que en palabras de soft se conoce como "expansin de variables retardada" (ver cmd /? y set /?): 1. Debemos habilitarla (por defecto vienen deshabilitadas), para ello necesitamos abrir una subshell:
cmd /v:on

o bien introducir como primera instruccin del bat:


SETLOCAL ENABLEDELAYEDEXPANSION

2. Las variables que deseemos que se expandan en el momento preciso de su utilizacin las rodearemos con admiraciones (!). El siguiente programa funcionara correctamente:
@echo off set VAR=basura echo antes del IF: %VAR% IF DEFINED VAR ( set VAR=CHATARRA echo en el IF (1): %VAR% echo en el IF (2): !VAR! ) echo despus del IF: %VAR% C:\Documents and Settings\sirio\prueba>cmd /v:on Microsoft Windows 2000 [Versin 5.00.2195] (C) Copyright 1985-2000 Microsoft Corp. C:\Documents and Settings\sirio\prueba>vprog antes del IF: basura en el IF (1): basura <-- Aqu he utilizado %VAR% en el IF (2): CHATARRA <-- y aqu !VAR! despus del IF: CHATARRA

NOTA: Este mismo problema se presenta en el FOR, la solucin es la misma: expandir las variables en el momento de su utilizacin, no al iniciar la ejecucin de la estructura for.

La orden CHOICE
Permite escoger una opcin entre varias y, dependiendo de la opcin elegida, devuelve un cdigo de salida. Su sintaxis es: CHOICE [mensaje] [/C:opciones] [/N] [/S] [/T:opcin,segundos]

/C:opciones Especifica las opciones posibles. Si el usuario pulsa la primera de las opciones, Choice devolver un cdigo de salida 1; si pulsa la segunda opcin, Choice devuelve el cdigo 2 y as sucesivamente. Si no se especifica este parmetro se asumen las opciones por defecto (SN). /N No muestra las opciones admitidas detrs del mensaje. /S Hace distincin entre maysculas y minsculas. Si no se especifica este parmetro se toman como la misma opcin. /T:opcin,segs Toma la opcin 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: DEMOB.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 cdigo de salida 1 y `N' a un cdigo 2. En la segunda orden Choice se toman las opciones F y C. `F' corresponde a un cdigo 1 y `C' a un cdigo 2. Con la orden Choice y de una forma muy sencilla podemos crear mens 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 if errorlevel 5 goto if errorlevel 4 goto if errorlevel 3 goto if errorlevel 2 goto if errorlevel 1 goto if errorlevel 0 goto :Anti MSAV goto Menu :Backup MSBACKUP goto Menu :Defrag DEFRAG goto Menu :Editor EDIT goto Menu :Salir echo. desea comenzar? /c:abdes /n /t:s,15 Salir Editor Defrag Backup Anti Menu

Observe la orden Choice: el modificador /C indica las opciones admitidas. Si se pulsa la `A' se generar un cdigo de salida 1 y as sucesivamente hasta la `S' que corresponde a un cdigo 5. Gracias al modificador /N Choice no muestra las teclas admitidas detrs del mensaje. El modificador /T toma como opcin por defecto la `S' si pasan 15 segundos sin pulsar ninguna tecla. Observe, asimismo, cmo se ha comenzado en las lneas If por el errorlevel ms alto: as se evitan conflictos. El cdigo de salida 0 se obtiene si el usuario responde con Ctrl+Pausa al mensaje de Choice.

Ejercicios de autocomprobacin
5. Escriba un fichero de procesamiento por lotes para borrar el fichero introducido como parmetro. El programa debe comprobar previamente si se ha introducido algn parmetro y si el fichero existe. 6. Para qu devuelven un cdigo de salida las rdenes externas? 7. Escriba un fichero por lotes que nos pregunte si deseamos ver el directorio de A: o el de B:

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 ms diseadas para su uso en ficheros por lotes. Como estas rdenes tienen un menor uso, se exponen resumidamente a continuacin.

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 tambin, 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 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.
FOR: Nos sirve para repetir un comando varias veces, en distintas variables. Un ejemplo, es este: FOR /L %%i IN (0,1,21) DO (echo %%i) En donde /L es para especificar que nuestro for se basara en un conteo de nmeros. Aqu se repetir un Echo, que imprimir nmeros del 0 al 21. %%i sera el nombre de la variable que almacenara datos in (0,1,21) aqu especificamos que se repetir del 0 al 1 y del 1 al 21. do (echo %%i) Esto es la funcin que se ejecutara en cada repeticin del comando, en este caso un echo que imprimir la variable. Batch en algunos casos SI reconoce entre maysculas y minsculas, como en el caso de la variable %%i si esta se llamara %%I no seria reconocida como la misma. Otro uso que puede ser aplicado en el FOR es el listado de carpetas o archivos, como veremos a continuacin: Listado de archivos: @echo off FOR %%x in (a*) DO echo %%x pause Este cdigo, listara todos los archivos que comienzan con A. Por que? * (asterisco) es un signo comodn, por lo cual al poner a*, estamos diciendo cualquier archivo que tenga una A delante y luego cualquier cosa. Otro ejemplo del uso de comodn, es listar archivos con extensin comn como seria este: @echo off FOR %%x in (*.jpg) DO echo %%x pause

Aqui nos estaria listando todos los archivos que tengan la extensin .jpg Listado de Carpetas: FOR /D %%x in (a*) DO echo %%x Es casi lo mismo anterior, tan solo que al indicar /D solo se aplica a directorios. Si quisiramos que se listaran los directorios, juntos a los directorios que tienen estos dentro se ocupa /R FOR /R /D %%x in (a*) DO echo %%x y si quisiramos listar todos los documentos que estn dentro de una carpeta contando los que estn dentro de carpetas se ocupa solamente /R (Sin /D) FOR /R %%x in (a*) DO echo %%x Con esto creo que tenemos lo bsico, y ms importante de los condicionales.

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>

Clave de los ejercicios de autocomprobacin


1. La lnea ECHO muestra el mensaje "Ficheros por lotes" en pantalla y la lnea REM es ignorada al funcionar el programa. 2. Espera la pulsacin de una tecla. Como la salida de Pause est redireccionada al dispositivo nulo, no se mostrar ningn mensaje en la pantalla. 3.
@echo off Echo Introduzca un disquete en la unidad A: Pause dir a:\

4. Muestra el directorio raz de la unidad C: y luego la versin del sistema operativo. Como el nombre de las etiquetas slo admite ocho caracteres significativos la orden GOTO ETIQUETA2 llevar a la primera etiqueta empezada por ETIQUETA, en este caso ETIQUETA1. 5.
@echo off if "%1"=="" goto Error1 if not exist %1 goto Error2 del %1 echo El fichero %1 se ha borrado goto Final :Error1

echo Debe especificar un fichero goto Final :Error2 echo El fichero %1 no existe :Final echo.

6. Las rdenes externas devuelven un cdigo de salida para ser utilizado en los ficheros por lotes. Posteriormente se podr evaluar este cdigo gracias a la orden If errorlevel. 7.
@echo off echo A. Ver el directorio de A: echo B. Ver el directorio de B: choice Elija opcin /c:ab if errorlevel 1 if not errorlevel 2 dir a:\ if errorlevel 2 if not errorlevel 3 dir b:\

Matando Procesos:
Alguna vez has presionado CTRL+ALT+DELETE? Si lo haces se abre el Administrador de tarea. En la pestaa procesos salen algunos procesos que estn andando en tu pc, hacindoles clics y apretando terminar proceso lo puedes acabar. Con batch eso es muy fcil, se usa la funcin: Taskkill (No funciona en todos los pc, para ver si esta disponible escribe taskkill/?) Su sintaxis es: taskkill /f /im proceso.exe /f Fuerza el trmino del proceso. Un ejemplo seria escribir. taskkill /f /im wmplayer.exe Si lo ejecutas y tienes el Reproductor de Windows Media abierto, este se cerrar.

ABRIENDO PROCESOS:
start proceso.exe

Ahora abramos ese proceso que cerramos. Para abrir procesos se usa la funcin Start que funciona as:

Tambin puedes abrir paginas web con tu explorador predeterminado. Ejemplo1: start wmplayer.exe Se abrir el Reproductor de Msica Ejemplo2: start www.google.cl Se abrir tu Explorador de Internet en Google.

Apagado y Reiniciado de Pc:


Una cosa muy interesante que puedes hacer con Batch es Apagar y Reiniciar tu Pc, incluso programarlo para que apague a la hora que desees. Es notablemente fcil. se ocupa de la siguiente manera el apagado.

shutdown -s -t Tiempo -c Comentario


donde -s significa que lo apagaremos, -t debe ir seguido de los segundos que demorara apagar. En windos XP mostrara un contador, con el comentario que va luego de -c, pero en Windows Vista no abra ni un contador, solamente saldr una alerta con el Comentario, que ni siquiera es obligatorio. Bueno, de seguro quieres hacer la prueba. La puedes hacer pero antes de eso te recomiendo que leas lo siguiente. Puedes cancelar el apagado (Antes de que el contador termine) solamente escribiendo shutdown a ya sea en un archivo de texto con extensin bat, como en el mismo Shell.

shutdown -s -t 999999 -c "Esto se esta apagando" shutdown -a Ok, si en vez de ocupar -s usas -r el PC se reiniciara. Tambin puedes forzar el cierre de los programas, para que no de tiempo de guardar nada. Tan solo ocupando -f Un ejemplo de un Pc, que se Apaga Forzosamente y que puede daar el pc y luego se reinicia es este: shutdown -r -f -t 0 -c "Bye" Con la funcin AT puedes programar el apagado.

Insertar al Registro:
Insertar al registro tu Batch puede ser muy til, la verdad yo no entiendo mucho del registro pero le un poco y aqu tienen un ejemplo que se encuentra a ser sincero en muchas web. Donde aremos que nuestro batch se ejecute con el Sistema. REG ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run MIBATCH.bat /t REG_SZ /d C:\MIBATCH.bat Con la funcin REG ADD Agregamos algo al registro. Con otros comando podemos borrar. Lo que sigue es la Direccin de donde insertaremos el registro que en este caso sera para que nuestro batch se ejecute al iniciar Sesin. En medio de toda la direccin se puede leer MIBATCH.bat yo puse el nombre del Batch pero tambin se puede poner cualquier otra cosa. Ms adelante donde dice C:\MIBATCH.bat, es la direccin completa de donde esta nuestro Batch. Con solo esta linea estamos listos. Haz la prueba! /v

Otras cosas tiles:


Para terminar hablare de pequeas funciones que pueden ser de utilidad. Msg Esta funcin tiene otras utilidades, pero les enseare esta que no funciona en todos los PC. Sirve para abrir una alerta con un mensaje su utilizacin es la siguiente: msg * EsteEsMiMensaje

AT Programar alguna accin a cierta hora. Ejemplo: At 20:00 msg * Son Las 8 de la noche Con esto a las 20:00 nos aparecer un mensaje que nos dir que son las 8 de la Noche. Tambin puedes programar un apagado o cualquier Cosa. Si la hora que das ya paso, se tomara como para el da siguiente.

Abrir Archivos Con:


Como algunos saben al hacer clic en un archivo la mayora de las veces nos muestra la opcin Abrir Con. Este tipo es especial para archivos que necesitamos abrir y no podemos ingresar a la carpeta, para archivos que no tienen la opciones de Abrir Con, y tambin para los que tienen computadoras lentas que al apretar esta opcin demoran mucho en mostrarla. Como hablamos en los tutoriales anteriores con la funcin start iniciamos procesos, por lo que por eso haremos lo siguiente. start archivo programa.exe o tambin. start programa.exe archivo Ambas dos funcionan igual. Lo que hacemos es elegir un programa, y un archivo de manera que el programa abrir al archivo dado. Como un ejemplo simple, abramos la carpeta C:/WINDOWS con el explorer. start C:/WINDOWS explorer.exe Para algunos archivos (Los que tiene direcciones y nombres con espacios) deberemos encerrarlos en comillas. start "C:\Carpeta con Espacios\Archivo con Espacios.txt" notepad.exe Como en este ejemplo donde abrimos un texto con Notepad (Bloc de Notas). De esta manera podemos abrir cualquier archivo o carpeta solo sabiendo su direccin. Aqui una pequea lista de programas, para que sepan sus nombres.

explorer.exe -> Explorer (El para ver las carpetas)

iexplorer.exe -> Internet Explorer

firefox.exe -> Firefox (Abrir webs con: start firefox.exe www.jestudio.cl) wmplayer.exe -> Reproductor de Musica Windows Media Player winamap.exe -> Reproductor de Musica Winamp player. mspaint.exe -> Paint cmd.exe -> Shell de comandos notepad.exe -> Bloc de notas photoshop.exe -> Photoshop

Entre muchos otros, para saber como se llama un programa podemos ver en la pestaa procesos de el administrador de tareas mientras el programa este abierto(CTRL+ALT+SUPR-CRTL+ALT+DEL). Adems muchas veces podemos simplemente adivinar su nombre.

Borrar de Agrandes Cantidades:


A mi me a pasado muchas veces que me han quedado carpetas infectadas de archivos intiles y he comenzado a borrarlos uno por uno. Cuando iba en la mitad me aburr y decid ser eficiente, asi que se me ocurri un cdigo para borrar. Los archivos que yo quera borrar tenan todos la misma desconocida extensin que ya no me acuerda como era, pero supongamos que era .sfk, Como aniquilarlos todos sin mover un dedo? Pues con esta funcin, podemos borrar todos los archivos que tengan cierta cosa en comn, pero recuerden tener extremo cuidado pues pueden llegar a borrar algo no deseado. FOR /R %%x in (*.sfk) DO (DEL "%%x") Como vemos tiene el formato: FOR /R %%Variable in (ElValorEnComun) DO (AccionAEjecutar) Donde /R significa que no solo afectara a una carpeta si no que a todas las superiores. Si agregramos ese cdigo en algn Batch, al correrlo comenzara a borrar todos los archivos con la extensin sfk que hayan en directorios superiores al suyo o en el mismo. (Directorios = Carpetas) Claramente yo quise tener cuidado, y no borrar cosas indeseadas. Por lo que antes hice esto: FOR /R %%x in (*.sfk) DO (echo "%%x") Es lo mismo, solo que como accin en vez de borrar los list. Una vez verificado que no haba ningn archivo que me importara ejecute el otro. Para el valor en comun hay varias maneras de darlo. Son de la siguiente manera.

comn.mp3 -> Todos los archivos con ese nombre exacto.

comn.* -> Todos los archivos con ese nombre, sin importar la extensin. comn* -> Todos los archivos que comiencen en comn. *comn.mp3 -> Todos los archivos terminados en comn.mp3. *.mp3 -> Todo los archivos con la extensin mp3. *comn* -> Todos los archivos que contengan la palabra comn. * -> Todos los archivos, sin importar su nombre o extensin.

Por ejemplo si ejecuto: FOR /R %%x in (*a*) DO (DEL "%%x") Se borraran todos los archivos que tengan una a en su nombre o extensin. FOR /R %%x in (*) DO (DEL "%%x") Se borraran todos los archivos existentes. Yo mi programa lo deje as: @echo off echo Se han encontrado los siguiente sfk: FOR /R %%x in (*.sfk) DO (echo "%%x") echo ----------------------------------------echo Presione una tecla si desea eliminarlos echo De lo contrario cierre la ventana. pause>nul echo Estas seguro? pause>nul echo Pues comencemos pause>nul FOR /R %%x in (*.sfk) DO (DEL "%%x") echo LISTO pause>nul echo adis pause>nul exit

Mover o Copiar de a grandes cantidades


Como se puede ver, en el punto anterior se borran muchos archivos en comn con solo una linea de codigo. Pues para copiar y mover se hace casi lo mismo.

FOR /R %%x in (*) DO (MOVE "%%x" C:\DestinoDeLosArchivos\) En la carpeta que lo ejecutemos mover todos los archivos a C:\DestinoDeLosArchivos\ FOR /R %%x in (*.txt) DO (COPY "%%x" C:\DestinoDeLosArchivos\) En la carpeta que lo ejecutemos mover todos los archivos con extensin .txt a C:DestinoDeLosArchivos.

Crear una lista de reproduccin.


Como fue visto en los tutoriales anteriores, podemos crear fcilmente archivos desde batch. Pero comnmente solo se nos ocurrira escribir otro batch o un texto. Bueno, me di cuenta que la forma de escribir de las listas de reproduccin de Winamp son extremadamente simple. Simplemente los nombres de las canciones. (Solo sirve para winamp) Por ejemplo, si quisiramos crear un bat que al apretarlo crea una lista de reproduccin con todos los archivos de msica existentes en la carpeta haramos lo siguiente. @echo off echo. > lista.m3u FOR %%x in (*.mp3) DO ( echo %%~nx.mp3 >> lista.m3u ) start lista.m3u winamp.exe exit Al ejecutarlo nos creara un lista de reproduccin de nuestra carpeta y comenzara a reproducirla. La lista quedara creada, si es que quieres que la lista no quede en tu pc. agrega estas lineas antes de exit: pause DEL lista.m3u Basicamente lo que se hace con este codigo es crear un archivo con extensin .m3u que dentro contiene los nombres de las canciones. %%~nx significa que nos devolver solo el nombre de el archivo sin la direccin.

Acortar direcciones:
Cuando usamos un for para recorrer los archivos nos devuelve la direccin entera del archivo. Esto es molesto, cuando lo que queremos es solo su nombre, o saber su ubicacin. Ahora les voy a ensear una tcnica para acortar esas direcciones. En el caso por ejemplo de que la variable X tenga la direccin de un archivo y solo quisiramos saber su extensin, usaramos: %~xX y si quisiramos saber en que unidad se encuentra: %~dX

Para entender un poco mejor esto, miremos esto como una sintaxis. Siempre se usara %~ seguido de una letra que representa lo que queremos obtener (el nombre, la extensin, etc) y por ultimo el nombre de la variable. Las letras que podemos usar son:

Por ejemplo, este programa nos mostrara algunos datos de los archivos que existan en la misma carpeta y directorios superiores. @echo off FOR /R %%X in (*) DO ( echo Nombre: %%~nX echo Extension: %%~xX echo Tamao: %%~zX echo. ) Como vez, en el caso de los FOR debemos agregar un % extra adelante.

f Ruta y Nombre d Nombre Unidad donde se encuentra p Solo ruta n Solo nombre x Extensin s Ruta abreviada a Atributos t Fecha y hora de creacin z Tamao del archivo

Lista de Reproduccin para

Windows Media Player:

Ms o menos siguiendo el esquema anterior, lo que hize fue ver como era aproximadamente como era un archivo de Lista de Reproduccin. Despus de un no muy intenso anlisis podemos ver que es as. <smil><body><seq> <media src="RUTA NO FIJA DEL ARCHIVO.mp3" /> </seq></body></smil> El problema que encontr en la sintaxis de los archivos es que al intentar hacer un echo a los signos <y > el cdigo dejaba de funcionar. Pues encontr la solucin, simplemente agregando el signo ^ antes de cada < o >. Pues as qued: @echo off echo. > Lista.wpl echo ^<smil^>^<body^>^<seq^> >> Lista.wpl FOR %%X in (*.mp3) DO ( echo ^<media src="%%~nX%%~xX" /^> >> Lista.wpl ) echo ^</seq^>^</body^>^</smil^> >> Lista.wpl

start Lista.wpl exit Explicacin:

(Si tienes dudas sobre esta explicacin, es que no entendiste bien los 3 tutoriales anteriores) @echo off Eliminamos el Eco echo. > Lista.wpl Creamos un nuevo archivo Lista.wpl o borramos su contenido si existe echo ^<smil^>^<body^>^<seq^> >> Lista.wpl Escribimos <smil><body><seq> en la primera linea del archivo Lista.wpl for %%X in (*.mp3) DO () Ejecutar la accin entre parntesis para cada archivo encontrado con extensin .mp3 echo ^<media src=%%~nX%%~xX /^> >> Lista.wpl Escribir <media src=NombreArchivo+Extencion/> en la siguiente linea de Lista.wpl, esta accion se repite por cada mp3 encontrado. echo ^</seq^>^</body^>^</smil^> >> Lista.wpl Escribir </seq></body></smil> alfinal del archivo. start Lista.wpl Abrir la lista con el programa predeterminado exit Cerrar ventana DOS

Вам также может понравиться