Autor
|
Tema: BATCH que busque un archivo con cadena de texto y lo elimine (Leído 4,988 veces)
|
hugolopez
Desconectado
Mensajes: 5
|
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 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 ( type " %%_" | find /i "Secretox" > nul 2 >&1 && ( del /f /q " %%_" && echo.Se encontro y elimino : %%~_ >> Reporte.txt ) ) ) )
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
|
|
« Última modificación: 22 Abril 2015, 10:58 am por Eleкtro »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
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í: 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 ( For /R %%f In (" %filePattern%" ) Do ( (Type " %%~ff" | Findstr /I " %textPattern%" )1 >Nul 2 >&1 && ( Echo: Se encontró y eliminó: " %%~ff" ) ) ) ) ))>".\Report.txt"
Saludos
|
|
« Última modificación: 22 Abril 2015, 13:27 pm por Eleкtro »
|
En línea
|
|
|
|
hugolopez
Desconectado
Mensajes: 5
|
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í: 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 ( For /R %%f In (" %filePattern%" ) Do ( (Type " %%~ff" | Findstr /I " %textPattern%" )1 >Nul 2 >&1 && ( Echo: Se encontró y eliminó: " %%~ff" ) ) ) ) ))>".\Report.txt"
Saludos
|
|
« Última modificación: 22 Abril 2015, 12:13 pm por hugolopez »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
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. 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: por: 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": 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
Mensajes: 5
|
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: por: 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": 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 @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
Mensajes: 9.885
|
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
|
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
¿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. ¿Como puedo indicar mas de un tipo de archivos Separando los patrones de búsqueda con comas: For /R %%a In ("*.ext1","*.ext2") Do (...) o palabras? Separando las palabras con espacios en blanco. 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_expressionSaludos
|
|
« Última modificación: 23 Abril 2015, 00:38 am por Eleкtro »
|
En línea
|
|
|
|
hugolopez
Desconectado
Mensajes: 5
|
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!!
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
¿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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Identificar una cadena de texto en un archivo.
« 1 2 »
Programación Visual Basic
|
Impersecuto
|
10
|
3,958
|
26 Julio 2007, 00:36 am
por Tengu
|
|
|
BHB Convierte archivo a texto y lo reconstruye en batch 2.0
« 1 2 »
Scripting
|
carlitos.dll
|
10
|
15,819
|
24 Agosto 2008, 17:17 pm
por Martín Fierro
|
|
|
Batch que busque y elimine ".log" anteriores a una fecha? (SOLUCIONADO)
Scripting
|
SuperDraco
|
3
|
6,935
|
12 Noviembre 2009, 02:29 am
por flony
|
|
|
Batch que busque un archivo y lo ejecute y ejecutar combinaciones del teclado...
Scripting
|
Dsalomon
|
9
|
9,051
|
3 Septiembre 2012, 10:41 am
por Dsalomon
|
|
|
Ayuda para hacer una función que busque en un archivo - C
Programación C/C++
|
lucasxxviii
|
6
|
3,620
|
25 Junio 2016, 01:43 am
por lucasxxviii
|
|