Posts belonging to Category MS-Dos



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:

Busca una cadena de texto en uno o más archivos.
FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "cadena" [[unidad:][ruta]archivo[ ...]]

/V        Muestra todas las líneas que no tengan la cadena especificada.
/C        Muestra sólo el número de líneas que contienen la cadena.
/N        Muestra el número de línea de cada línea.
/I          Omite mayúsculas/minúsculas al buscar una cadena.
/OFF[LINE] No omite archivos con el atributo "sin conexión" establecido.
"cadena"  Especifica el texto que se desea buscar.
[unidad:][ruta]archivo
Especifica el o los archivos a buscar.
Si no se especifica una ruta, FIND busca el texto que se escriba en el símbolo
del sistema o que se canalice desde otro comando.

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:

Busca cadenas en los archivos.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
[/F:archivo]
[/C:cadena] [/G:archivo] [/D:lista de directorios] [/A:atributos de color] [/
OFF[LINE]]
[cadenas] [[unidad:][ruta]nombredearchivo[ ...]]

/B        Hace coincidir los modelos si están al principio de la línea.
/E        Hace coincidir los modelos si están al final de la línea.
/L        Literalmente utiliza cadenas de búsqueda.
/R        Utiliza cadenas de búsqueda como expresiones regulares.
/S        Busca archivos que coinciden en el directorio actual y en todos
los subdirectorios.
/I        Especifica que la búsqueda no distingue mayúsculas de minúsculas.
/X        Imprime líneas que coinciden con exactitud.
/V        Sólo imprime líneas que no contienen una correspondencia.
/N        Imprime el número de la línea antes de la línea que coincide.
/M        Sólo imprime el nombre de archivo si el archivo contiene una
correspondencia.
/O        Imprime un carácter de desplazamiento antes de las líneas que
coinciden.
/P        Omite archivos con caracteres que no son imprimibles
/OFFLINE  No omite archivos con el atributo "sin conexión" establecido.
/A:attr   Especifica atributos de color con dos dígitos hexadecimales. Ver
"color /?"
/F:archivo  Lee la lista de archivos desde el archivo especificado
(/ significa consola).
/C:cadena   Utiliza una cadena especificada como una búsqueda de cadena
literal.
/G:archivo  Toma la búsqueda de archivos desde el archivo especificado
(/ significa consola).
/D:dir    Busca un signo de punto y coma de la lista delimitada de
directorios
cadenas   Texto que se debe buscar.
[unidad:][ruta]nombredearchivo
Especifica un archivo o  archivos que buscar.

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)
:busca
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.
cls
REM  cls; es Clear Screen, para borrar la pantalla y empezar de cero
@echo off
REM  @echo off; con esta orden desactivamos el echo, para que no nos muestre lo que va haciendo por pantalla
MODE CON cols=80 lines=30
REM  MODE CON cols=xx lines=XX; con esta orden decido el tamaño que tendra la ventana.
color 47
REM  Color xx; con esta orden ajusto los colores rojo de fondo y blanco de texto.
Title Buscador de telefonos en XXX XXXXXXX XXXXXXXX By: Borh@ps! (version:1)
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.
echo.
echo     ===============================================================
echo     = +-++-++-++-++-++-++-++-+ +-++-+ +-++-++-++-++-++-++-++-++-+ =
echo     = [B  U  S  C  A  D  O  R] [D  E] [T  E  L  E  F  O  N  O  S] =
echo     = +-++-++-++-++-++-++-++-+ +-++-+ +-++-++-++-++-++-++-++-++-+ =
echo     ===============================================================
echo.
echo      Elige la plataforma a buscar:
echo          (introduce el numero)
echo.
echo.
echo.
echo.
echo     1. GUARDIAS RUTA1
echo.
echo     2. GUARDIAS RUTA2
echo.
echo     3. GUARDIAS RUTA3
echo.
echo     0. SALIR DEL BUSCADOR
echo.
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.
set/p buscador= Escriba el numero determinado y pulse ENTER ===">
if %buscador%== 1 goto etiqueta1
if %buscador%== 2 goto etiqueta2
if %buscador%== 3 goto etiqueta3
if %buscador%== 0 goto Salir
if %buscador%== %google% goto error
pause>nul
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.
:etiqueta1
cls
echo.
echo     =========================================
echo     =                                       =
echo     =  BUSCADOR DE TELEFONOS EN RUTA1       =
echo     =                                       =
echo     =========================================
echo.
echo.
echo.
echo.
echo.
echo         Esta opcion busca telefonos en:
echo         Unidad:\RUTA1
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
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.
set/p busqueda= Escriba la palabra a buscar y pulse ENTER ===">
del \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
findstr /i /m  %busqueda% \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\RUTA1\*.*
>>\\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
pause
start \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
goto busca
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.
:Salir
cls
color 07
exit
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.
:error
cls
msg * La Obcion que eligio no existe, pruebe con otra, Gracias.
goto busca
exit
pause>nul
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:
:busca
cls
@echo off
MODE CON cols=80 lines=30
color 47
Title Buscador de telefonos en XXX XXXXXXX XXXXXXXX By: Borh@ps! (version:1)
echo.
echo     ===============================================================
echo     = +-++-++-++-++-++-++-++-+ +-++-+ +-++-++-++-++-++-++-++-++-+ =
echo     = [B  U  S  C  A  D  O  R] [D  E] [T  E  L  E  F  O  N  O  S] =
echo     = +-++-++-++-++-++-++-++-+ +-++-+ +-++-++-++-++-++-++-++-++-+ =
echo     ===============================================================
echo.
echo      Elige la plataforma a buscar:
echo          (introduce el numero)
echo.
echo.
echo.
echo.
echo     1. GUARDIAS RUTA1
echo.
echo     2. GUARDIAS RUTA2
echo.
echo     3. GUARDIAS RUTA3
echo.
echo     0. SALIR DEL BUSCADOR
echo.
echo.
set/p buscador= Escriba el numero determinado y pulse ENTER ===">
if %buscador%== 1 goto etiqueta1
if %buscador%== 2 goto etiqueta2
if %buscador%== 3 goto etiqueta3
if %buscador%== 0 goto Salir
if %buscador%== %google% goto error
pause>nul
:etiqueta1
cls
echo.
echo     =========================================
echo     =                                       =
echo     =  BUSCADOR DE TELEFONOS EN RUTA1       =
echo     =                                       =
echo     =========================================
echo.
echo.
echo.
echo.
echo.
echo         Esta opcion busca telefonos en:
echo         Unidad:\RUTA1
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
set/p busqueda= Escriba la palabra a buscar y pulse ENTER ===">
del \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
findstr /i /m  %busqueda% \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\RUTA1\*.*
>>\\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
pause
start \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
goto busca
:etiqueta2
cls
echo.
echo     =========================================
echo     =                                       =
echo     =  BUSCADOR DE TELEFONOS EN RUTA2       =
echo     =                                       =
echo     =========================================
echo.
echo.
echo.
echo.
echo.
echo         Esta opcion busca telefonos en:
echo         Unidad:\RUTA2
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
set/p busqueda= Escriba la palabra a buscar y pulse ENTER ===">
del \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
findstr /i /m  %busqueda% \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\RUTA2\*.*
>>\\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
pause
start \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
goto busca
:etiqueta3
cls
echo.
echo     =========================================
echo     =                                       =
echo     =  BUSCADOR DE TELEFONOS EN RUTA3       =
echo     =                                       =
echo     =========================================
echo.
echo.
echo.
echo.
echo.
echo         Esta opcion busca telefonos en:
echo         Unidad:\RUTA3
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
set/p busqueda= Escriba la palabra a buscar y pulse ENTER ===">
del \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
findstr /i /m  %busqueda% \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\RUTA3\*.*
>>\\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
pause
start \\unidad.remota\carpeta_1\Carpeta_2\TELEFO~1\resultado.txt
goto busca
:Salir
cls
color 07
exit
:error
cls
msg * La Obcion que eligio no existe, pruebe con otra, Gracias.
goto busca
exit
pause>nul

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.

Share

Menú Ecoleganes

este es gracioso, es un menú sencillo para poder ejecutar 9 operaciones distintas y la 10 salir del programa, a ver que os parece….

(sigo con los problemas del yen \ donde veais este simbolo poner / al reves (Altgr + ªº))

*****************************************************************************

:buscador
cls
@echo off

Title Menu Ecoleganes V: 01.0 By: Borh@ps! by:Borh@ps!
echo.
echo =========================================
echo = =
echo = Menu Ecoleganes =
echo = =
echo =========================================
echo.
echo.
echo.
echo Que desea hacer?
echo.
echo.
echo.
echo 1. Ir a la Web de ecoleganes.
echo.
echo 2. Buscar Imagenes en Google.
echo.
echo 3. Ver las Noticias en Google.
echo.
echo 4. descargar manualmente el archivo actual de mas voces.
echo.
echo 5. Busqueda de Libros en Google.
echo.
echo 6. Ir al Gmail.
echo.
echo 7. menu automatizacion.
echo.
echo 8. sin asignar.
echo.
echo 9. Sin asignar.
echo.
echo 0. Salir del Buscador.

echo.
echo.
set/p ecoleganes= Escriba el numero determinado y pulse ENTER.
if %ecoleganes%== 1 goto Web
if %ecoleganes%== 2 goto Imagenes
if %ecoleganes%== 3 goto Noticias
if %ecoleganes%== 4 goto voces
if %ecoleganes%== 5 goto Libros
if %ecoleganes%== 6 goto Gmail
if %ecoleganes%== 7 goto automatizacion
if %ecoleganes%== 8 goto buscador
if %ecoleganes%== 9 goto buscador
if %ecoleganes%== 0 goto Salir
if %ecoleganes%== %google% goto error
pause>nul
:Web
cls
@echo off
start http://www.ecoleganes.org/
goto buscador
:Imagenes
cls
start http://images.google.com.mx/imghp?hl=es&tab=ni
goto buscador
:Noticias
cls
start http://news.google.com.mx/nwshp?hl=es&tab=in
goto buscador
:voces
cls
start http://www.masvoces.org/
goto buscador
:Libros
cls
start http://books.google.com.mx/bkshp?hl=es&tab=wp
goto buscador
:Gmail
cls
start https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%3Ftab%3Dpm%26nsr%3D1%26ui%3Dhtml%26zy%3Dl&ltmpl=default&ltmplcache=2
goto buscador
:automatizacion
cls
c:\automatizacion\automatizacion.bat
goto buscador

:Salir
cls
exit
:error
cls
msg * La Obcion que eligio no existe, pruebe con otra, Gracias.
goto buscador
exit
pause>nul

*****************************************************************************

Share

FTP automatico

otro ejemplo de programita en MS-Dos, en este caso es un FTP que recoge un archivo de audio datado, generando cada dia automaticamente el esqueleto con la fecha a descargar.

a ver si os gusta.

sigo con los problemas del yen \ donde veais este simbolo poner / al reves (Altgr + ªº)

******************************************************************************

@title FTP – descargando mas voces a fecha %DD% del %MM% del %AAAA%
echo on
ftp -s:c:\automatizacion\masvoces.txt
echo programa mas voces descargado

**********************************

como veis tira de un archivo txt donde estan los datos del ftp. ese archivo.txt se genera mediante un programa esqueleto, que cambia los parametros segun el dia.

lo que genera es lo siguiente:

open ftp.masvoces.org
usuario
contraseña
lcd z:\descargas\masvoces
get 20081112masvoces.mp3
bye
**********************************
el esqueleto seria:

@title generando esqueleto masvoces.txt V: 01.1 By: Borhaps!
echo off
cls
echo open ftp.masvoces.org>c:\automatizacion\masvoces.txt
echo usuario>>c:\automatizacion\masvoces.txt
echo contraseña>>c:\automatizacion\masvoces.txt
echo lcd z:\descargas\masvoces>>c:\automatizacion\masvoces.txt
echo get %odate%masvoces.mp3>>c:\automatizacion\masvoces.txt
echo bye>>c:\automatizacion\masvoces.txt
echo esqueleto generado
exit

*****************************************************

Share

ciclico basados en horas y dias de la semana

hola a tod@s! os traigo una versión de un programita ciclico que prepare sobre MS-Dos para la radio de Ecoleganes basado en horas y dias de la semana, según la hora y el dia hace unas cosas u otras…

ya me direis que os parece!

P.D: el programa está entre los asteriscos, los asteriscos NO son parte del programa.

***************************************************************

@title Cyc diario esperando horas V: 01.0 By: Borh@ps!
echo off
cls
echo programa diario
start c:\automatizacion\esqueleto1.bat
:00
if not “%time%” == “23:59:00,00” goto 01
if “%time%” == “23:59:00,00” goto exit

:01
if not “%time%” == ” 1:30:00,00″ goto 02
if “%time%” == ” 1:30:00,00″ goto dia1

:02
if not “%time%” == “20:00:00,00” goto hora
if “%time%” == “20:00:00,00” goto descarga

:dia1
echo dia1
if not “%DS%” == “lunes” goto dia2
if “%DS%” == “lunes” goto lunes

:dia2
echo dia2
if not “%DS%” == “miercoles” goto dia3
if “%DS%” == “miercoles” goto lunes

:dia3
echo dia3
if not “%DS%” == “martes” goto hora
if “%DS%” == “martes” goto martes

:hora
if not “%time%” == “20:30:00,00” goto ninguna
if “%time%” == “20:30:00,00” goto voces1

:ninguna
echo son las %time% programa en espera…
goto 00

:voces1
ECHO Se va a copiar el archivo de mas voces a fecha %odate%

start c:\automatizacion\voces.lnk

goto 00

:lunes
echo se va a ejecutar el programa actualizacion
start c:\automatizacion\actualizacion.lnk
goto 00

:martes
echo martes
echo se van a generar los listados
start c:\automatizacion\infdescargas.lnk
start c:\automatizacion\infemision.lnk
start c:\automatizacion\infhistorico.lnk
goto 00

:descarga
start c:\automatizacion\ftpmasvo.bat
goto 00

:exit
exit

*************************************************************************

* el simbolo \ no es mas que slash al reves, o sea  este símbolo / pero en la otra dirección (Altgr + ªº) pero no se porque me muestra el yen, tendre alguna hoja de estilo mal, disculpad las molestias hasta que lo arregle.

Share