elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  BATCH que busque un archivo con cadena de texto y lo elimine
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: BATCH que busque un archivo con cadena de texto y lo elimine  (Leído 4,628 veces)
hugolopez

Desconectado Desconectado

Mensajes: 5


Ver Perfil
BATCH que busque un archivo con cadena de texto y lo elimine
« en: 22 Abril 2015, 06:05 am »

Hola muy buenas a todos, estoy tratando de crear un BATCH que me permita buscar un archivo .txt con una palabra especifica dentro del mismo, tengo el codigo de la siguiente forma

Código
  1. @echo on
  2. for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  3. dir /b %%i:\ > nul 2>&1 && (
  4. for /f "tokens=*" %%_ in ('dir /b /s *.txt') do (
  5. type "%%_" | find /i "Secretox" > nul 2>&1 && (
  6. del /f /q "%%_" && echo.Se encontro y elimino : %%~_ >> Reporte.txt )
  7. ) )
  8. )
  9. exit /b 0
  10.  

El codigo funciona pero solo borra los archivos de donde este el BATCH por ejemplo si lo pongo en el escritorio solo borra los .txt del escritorio pero si tengo una copia de ese archivo en mis documentos por ejemplo no lo borra, alguna sugerencia??

Gracias desde antes  :D


« Última modificación: 22 Abril 2015, 10:58 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #1 en: 22 Abril 2015, 10:58 am »

El script que has publicado es ineficiente, primero haces una búsqueda y generas un listado completo de los archivos contenidos en cada unidad de disco duro encontrada (con el consumo de tiempo que eso conlleva si el disco contiene miles de archivos), y luego, la otra búsqueda la realizas en el directorio de trabajo actual, desaprovechando el listado anterior.

Prueba así:
Código
  1. @Echo Off & (CHCP 1252)>1>NUL
  2.  
  3. Set "filePattern=*.txt"
  4. Set "textPattern=Secretox"
  5.  
  6. (For %%d in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) Do (
  7. (PUSHD "%%d:\")2>Nul && (
  8. For /R %%f In ("%filePattern%") Do (
  9. (Type "%%~ff" | Findstr /I "%textPattern%")1>Nul 2>&1 && (
  10. (Del /F /Q "%%~ff")2>Nul && (
  11. Echo: Se encontró y eliminó: "%%~ff"
  12. )
  13. )
  14. )
  15. )
  16. ))>".\Report.txt"
  17.  
  18. Pause&Exit /B 0

Saludos


« Última modificación: 22 Abril 2015, 13:27 pm por Eleкtro » En línea

hugolopez

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #2 en: 22 Abril 2015, 11:34 am »

Eleкtro muchas gracias por ayudarme estoy empezando en esto, te comento que probe con el codigo que me has anexado pero se queda pausado, me genera el archivo Report.txt, pero en blanco porque pues no esta eliminando los archivos ¿Que podra ser compañero?

El script que has publicado es ineficiente, primero haces una búsqueda y generas un listado completo de los archivos contenidos en cada unidad de disco duro encontrada (con el consumo de tiempo que eso conlleva si el disco contiene miles de archivos), y luego, la otra búsqueda la realizas en el directorio de trabajo actual, desaprovechando el listado anterior.

Prueba así:
Código
  1. @Echo Off & (CHCP 1252)>1>NUL
  2.  
  3. Set "filePattern=*.txt"
  4. Set "textPattern=Secretox"
  5.  
  6. (For %%d in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) Do (
  7. (PUSHD "%%d:\")2>Nul && (
  8. For /R %%f In ("%filePattern%") Do (
  9. (Type "%%~ff" | Findstr /I "%textPattern%")1>Nul 2>&1 && (
  10. (Del /F /Q "%%~ff")2>Nul && (
  11. Echo: Se encontró y eliminó: "%%~ff"
  12. )
  13. )
  14. )
  15. )
  16. ))>".\Report.txt"
  17.  
  18. Pause&Exit /B 0

Saludos
« Última modificación: 22 Abril 2015, 12:13 pm por hugolopez » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #3 en: 22 Abril 2015, 12:33 pm »

me genera el archivo Report.txt, pero en blanco porque pues no esta eliminando los archivos ¿Que podra ser compañero?

Hola

Lo probé minuciosamente antes de compartirlo, en mi caso funcionó correctamente.

1. ¿Que versión de Windows estás utilizando?.

2. ¿Has modificado el valor de alguna de estas variables?, en caso afirmativo, indica los valores que pusiste, y ten en cuenta que el comando "FindStr" usa expresiones regulares.

Citar
Código:
Set "filePattern=*.txt"
Set "textPattern=Secretox"

De todas formas puedes probar a desactivar el redireccionamiento de la salida de error (2>Nul) en este comando, para comprobar si te está fallando:
Código:
(Del /F /Q "%%~ff")2>Nul
por:
Código:
(Del /F /Q "%%~ff")

Si no muestra ningún error, entonces elimina la lógica donde eleminas archivos y comprueba si lo que te está fallando es el comando "Findstr" por que no esté encontrando el texto a buscar "Secretox":

Código:
For %%d in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) Do (
(PUSHD "%%d:\")2>Nul && (
For /R %%f In ("%filePattern%") Do (
(Type "%%~ff" | Findstr /I "%textPattern%")1>Nul 2>&1 && (
Echo: Se encontró el texto en: "%%~ff"
)
)
POPD
)
)

saludos
« Última modificación: 22 Abril 2015, 12:42 pm por Eleкtro » En línea

hugolopez

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #4 en: 22 Abril 2015, 12:45 pm »

Hola

Lo probé minuciosamente antes de compartirlo, en mi caso funcionó correctamente.

1. ¿Que versión de Windows estás utilizando?.

2. ¿Has modificado el valor de alguna de estas variables?, en caso afirmativo, indica los valores que pusiste, y ten en cuenta que el comando "FindStr" usa expresiones regulares.

De todas formas puedes probar a desactivar el redireccionamiento de la salida de error (2>Nul) en este comando, para comprobar si te está fallando:
Código:
(Del /F /Q "%%~ff")2>Nul
por:
Código:
(Del /F /Q "%%~ff")

Si no muestra ningún error, entonces elimina la lógica donde eleminas archivos y comprueba si lo que te está fallando es el comando "Findstr" por que no esté encontrando el texto a buscar "Secretox":

Código:
For %%d in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) Do (
(PUSHD "%%d:\")2>Nul && (
For /R %%f In ("%filePattern%") Do (
(Type "%%~ff" | Findstr /I "%textPattern%")1>Nul 2>&1 && (
Echo: Se encontró el texto en: "%%~ff"
)
)
POPD
)
)

saludos

Estoy utilizando Windows 7 y pues he probado lo que me has dicho y pues aun no elimina los .txt con la palabra que tengo en el escritorio ni en mis documentos, si genera el archivo Report.txt pero vacio, ahorita tengo asi el codigo tras borrar la linea indicada

Código:

@Echo Off & (CHCP 1252)>1>NUL
 
Set "filePattern=*.txt"
Set "textPattern=Secretox"
 
(For %%d in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) Do (
(PUSHD "%%d:\")2>Nul && (
For /R %%f In ("%filePattern%") Do (
(Type "%%~ff" | Findstr /I "%textPattern%")1>Nul 2>&1 && (
(Del /F /Q "%%~ff") && (
Echo: Se encontró y eliminó: "%%~ff"
)
)
)
POPD
)
))>".\Report.txt"
 
Pause&Exit /B 0

En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #5 en: 22 Abril 2015, 13:54 pm »

si genera el archivo Report.txt pero vacio

Pero, ¿estás esperando hasta que finalice la ejecución del script?, es decir, ¿esperas hasta que salga el "pause"?,
el archivo "report.txt" se genera vacío pero se irá rellenando con los archivos encontrados, puede tardar unos minutos dependiendo de la cantidad de archivos.

Ten en cuenta que ese batch-script que te mostré está optimizado para omitir la salida estándar y escribir directamente los resultados en el archivo de texto (con esto se obtiene un aumento de velocidad), en la consola no va a mostrar nada ...solo el pause, cuando termine el FOR de iterar los directorios.

Saludos!
« Última modificación: 22 Abril 2015, 14:02 pm por Eleкtro » En línea

hugolopez

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #6 en: 22 Abril 2015, 23:37 pm »

Gracias compañero te comento que era un problema con mi Antivirus que no permitia la ejecucion, lo he desactivado y ha funcionado de maravilla, lo unico que si demora algunos minutos, aprovecho para preguntartelo sino es molestia ¿Podria hacerse mas rapido? ¿Como puedo indicar mas de un tipo de archivos o palabras? GRACIAS ERES LO MAXIMO!  ;D ;D
« Última modificación: 23 Abril 2015, 00:35 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #7 en: 23 Abril 2015, 00:36 am »

Citar
¿Podria hacerse mas rapido?

No, cualquier modificación en el código solo podría tener una ínfima mejora en ese sentido, bienvenido a Batch.

Si consideras la velocidad de procesamiento cómo algo importante entonces debes desarrollar el código en cualquier otro lenguaje que no sea Batch.


Citar
¿Como puedo indicar mas de un tipo de archivos

Separando los patrones de búsqueda con comas:

Código:
For /R %%a In ("*.ext1","*.ext2") Do (...)


Citar
o palabras?

Separando las palabras con espacios en blanco.

Código:
Findstr /I "palabra1 palabra2"

Si alguna de las palabras se encuentra, el resultado del comando dará positivo.

Para detalles más específicos, lee la ayuda del comando Finstre donde te explica la sintaxis de uso, o documéntate sobre la utilización de expresiones regulares (RegEx), aunque ya te aviso que en el simple y limitado Batch hasta las expresiones regulares están muy limitadas.
http://en.wikipedia.org/wiki/Regular_expression


Saludos
« Última modificación: 23 Abril 2015, 00:38 am por Eleкtro » En línea

hugolopez

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #8 en: 23 Abril 2015, 00:38 am »

Muchisimas gracias por toda tu ayuda amigo, una ultima consulta mencionas otro lenguaje de programacion, ¿que lenguaje me recomendarias para lograr el mismo objetivo pero mas rapido?

De nuevo Gracias!!  ;D ;D
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: BATCH que busque un archivo con cadena de texto y lo elimine
« Respuesta #9 en: 23 Abril 2015, 00:53 am »

¿que lenguaje me recomendarias para lograr el mismo objetivo pero mas rapido?

Nunca me ha gustado recomendar un lenguaje en concreto ya que la decisión debería ser tuya y deberías valorar varios factores para tomar dicha decisión, pero basicamente te diría que te quedases con el que más cómodo te sientas a la hora de programar, te nombro algunos buenos lenguaje por mi orden de preferencia personal: Vb.Net, C#, Ruby, C++, Python y Java, algunos son compilados y otros interpretados, eso también influye en algunos aspectos generales en lo referente a la "velocidad",
si yo tuviese que escojer un lenguaje compilado sería VB.Net (o en su defecto C#, que practicamente es lo mismo y por cierto la velocidad es exactamente la misma), y si eligiese un lenguaje interpretado sería Ruby.

Saludos
« Última modificación: 23 Abril 2015, 00:59 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines