busqueda de texto en varios archivos de varias carpetas. (capitulo 1)

Hace unos dias me cambiaron de departamento en el trabajo y me encontre con un pequeño y curioso problema…

En mi trabajo tenemos que contactar con muchas personas de guardia (24 h) y de muchos departamentos distintos, teniendo que tener cuidado de no despertar a las 3 de la mañana a la guardia de un departamento erroneo.  Lo logico y normal en estos casos es tener una base de datos que se mantenga actualizada para no tener problemas, pero aqui es donde me tope con el problema curioso; las guardias son distintas cada mes, por lo que envian por correo multitud de archivos con contactos en distintos formatos, excel, doc, powerpoint, etc…

Empece a pensar en la posibilidad de crear algun sistema de base de datos que fuera capaz  (por medio de macros) de importar los datos de todos los archivos recibidos y actualizar todos los contactos de guardia segun departamentos y fechas, pero al ser multitud de formatos distintos que ademas no se suelen repetir, (con lo que habria que estar modificando las macros constantemente) no era factible. Iluso de mi segui con mi empeño e intente ver si se podia crear algun tipo de modelo unico de datos para que todos lo enviaran igual y solo fuera necesaria una macro… Pero tambien me di de bruces con otro imposible, ya que dicha informacion no solo nos la mandan a nosotros si no a multitud de destinos y paises.

Estaba hundido! no se me ocurria nada mas… y entonces… recorde el potente MS-Dos que tanto me gustaba de crio y que ahora tengo abandonado por pensar que no da para mucho.

Se me ocurrio crear un programa que realizara busquedas de cadenas de texto (nombre, apellidos, telefono, etc) dentro de todos los archivos de una carpeta.

asi que empece con el comando FIND

El comando FIND funciona de la siguiente manera:

asi que la idea seria:

find /i «cadena» z:\04 – VARIOS\TELEFONOS

el parametro /i es para que no diferencie entre mayusculas y minusculas.

lo probe y funcionaba bien pero me limitaba a una palabra, asi que me decidi por usar un comando un poco mas avanzado, FINDSTR

el comando FINDSRTR funciona de la siguiente manera:

Este comando era perfecto para mi cometido asi que empece a escribir el programa:

1.1 Inicio de programa

REM (para iros explicando lo que hace el programa añadire comentarios con este tipo de letra y precedidos de la palabra rem que para MS-Dos significa precisamente comentario)

REM :busca; es una etiqueta de comienzo. los dos puntos seguidos de una palabra convierten esa palabra en una etiqueta posicional para poder ir a cualquier parte del programa con solo dirigirnos a ella. por ejemplo al crear esta etiqueta :busca, cada vez que escribamos goto busca el programa volvera aqui, el principio del programa.

REM  cls; es Clear Screen, para borrar la pantalla y empezar de cero

REM  @echo off; con esta orden desactivamos el echo, para que no nos muestre lo que va haciendo por pantalla

REM  MODE CON cols=xx lines=XX; con esta orden decido el tamaño que tendra la ventana.

REM  Color xx; con esta orden ajusto los colores rojo de fondo y blanco de texto.

REM  Title; con esta orden le pongo titulo a la ventana
REM ahora voy a definir la mascara de pantalla que se vera al ejecutar el programa, para ello usare la funcion echo.

REM set/p; con este comando pedimos un valor al usuario y lo almacenamos cono variable.  En este caso lo almacenamos en la variable buscador. despues mediante el condicionador  if averiguamos el valor almacenado en la Variable buscador y le enviamos a la parte del  programa que le corresponda.

REM ahora vamos definiendo las opciones a elegir. Son todas iguales, lo unico que cambia es la ruta en la que busca.
REM Igual que antes lo primero es definir la mascara de pantalla que se visualizara.

REM Como veis dejo 26 lineas en total con echo, podria poner hasta un total de 30 en un solo pantallazo porque lo decidimos asi al principio del programa; MODE CON cols=80 lines=30. si necesitaramos mas aumentariamos el tamaño de lines.

REM bueno vamos despacito que aqui hemos incluido muchas cosas.  lo primero es el set/p (que ya conocemos) para almacenar la palabra a buscar.
REM lo segundo es una orden DEL de un archivo que esta guardado en red. este archivo sera el que se cree cada vez que realicemos una consulta, y para que no salgan datos de una consulta anterior lo primero que haremos sera borrarlo.
REM la siguiente linea tiene varias ordenes,  findstr /i /m  %busqueda% \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\RUTA1\*.* ; este es el comando para realizar la busqueda de la palabra en todos los ficheros que esten dentro de la RUTA1. Como veis la he complicado metiendola dentro de subcarpetas y en otra unidad de red, para que veais que podeis buscar donde querais.
REM en la misma linea a continuacion aparece lo siguiente: >>\\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt; el caracter > sirve para dirigir el resultado del comando introducido anteriormente a un archivo. cuando se usa dos veces seguidas significa que lo tiene que crear >>, y cuando se pone solo una significa que tiene que añadir una linea. >
REM la siguiente orden es PAUSE, esta orden hace que el programa se quede en espera de que el usuario presiona una tecla y muestra en pantalla el texto: Presione una tecla para continuar…
REM la siguiente linea, start \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt; abre el archivo que hemos creado con el bloc de notas para que veamos cuales son los archivos que contienen la cadena que hemos buscado.
REM y la ultima linea:  goto busca; con esta orden le decimos al programa que vaya hasta la etiqueta busca, que estaba al principio del programa, con lo que volveria a mostrar la pantalla inicial.
REM Las otras 2 rutas de busqueda serian una copia exacta de esta sustituyendo el nombre de etiqueta y la ruta de busqueda.
REM Solo nos quedarian por definir la opcion 0 que era salir y el error que son todas las que no coincidan con las establecidas en el menu principal.

REM en la etiqueta salir lo que hacemos es borrar la pantalla con el comando CLS, volver a poner el color original COLOR 07 (fondo negro y letras blancas) y cerrar la pantalla de MS-Dos con el comando EXIT.

REM En la etiqueta error lo que hacemos es borrar la pantalla, mediante el comando CLS, mostrar un mensaje en pantalla con el texto La Obcion que eligio no existe, pruebe con otra, Gracias. Mediante el comando MSG *, y volvemos a ir al principio del programa.
REM Todo junto y sin comentarios nos quedaria algo asi:

Bueno pues con esto ya tenemos el programa en su version mas basica. Este programa aun tiene un monton de defectos,  pero eso lo dejo para los proximos post, y asi lo vamos complicando y mejorando. espero que os haya gustado, hasta la proxima!

P.D: en http://www.borhaps.es/formacion/ os colgare el programa completo con todas las mejoras de golpe para los que os querais ahorrar el proceso de mejoras.

Enlace permanente a este artículo: http://www.borhaps.es/busqueda-de-texto-en-varios-archivos-de-varias-carpetas-capitulo-1/

publi

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.