Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: elecktra en 12 Agosto 2008, 03:38 am



Título: [Batch] Borrar Archivos segun su fecha
Publicado por: elecktra en 12 Agosto 2008, 03:38 am
BUENAS!!!
Es posible elimanr archivos segun su fecha de creacion?
Me explico mejor:
Supongamos que en la unidad "C" tengo esta ruta: "C:\export\" y dentro de esa carpeta se me general archivos de .txt practicamente todos los dias, la idea es hacer un BAt que compruebe si el archivo fue creado el mes anterios que lo elimine si no, no; el mes lo hago del 25 al 25 de cada, si el archivo es del 25 del mes pasado lo elimine, si no, no, creo que tengo que dar atributos a los archivos, pero no se como hacerlo.
Desde ya gracias, espero me puedan ayudar!
Saludos!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 12 Agosto 2008, 15:11 pm
No se como podría hacerse en batch puro, pero si en vbscript  :rolleyes:

Código
  1. set objfso = createobject("scripting.filesystemobject")
  2. set carpeta = objfso.getfolder("c:\export")
  3. set archivos = carpeta.files
  4.  
  5. for each a in archivos
  6. if datediff("m",a.datecreated,now()) >= 1 then
  7. objfso.deletefile(a.path)
  8. end if
  9. next

Este script puedes "empaquetarlo" en un *.bat..
Código
  1. echo ^set objfso = createobject("scripting.filesystemobject") >> %temp%\delbydate.vbs
  2. echo ^set carpeta = objfso.getfolder("c:\export") >> %temp%\delbydate.vbs
  3. echo ^set archivos = carpeta.files >> %temp%\delbydate.vbs
  4. echo for each a in archivos >> %temp%\delbydate.vbs
  5. echo if datediff("m",a.datecreated,now()) ^>= 1 then >> %temp%\delbydate.vbs
  6. echo objfso.deletefile(a.path) >> %temp%\delbydate.vbs
  7. echo end if >> %temp%\delbydate.vbs
  8. echo next >> %temp%\delbydate.vbs
  9. start /wait %temp%\delbydate.vbs
  10. del %temp%\delbydate.vbs
  11.  

Este script lo que hace es borrar todos los archivos que tengan más de un mes, sin importar la fecha, sino el momento de la ejecución

Saludos  ;)


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 12 Agosto 2008, 19:05 pm
Gracias!
Pero me explicas en donde trabaja el scrip ese, osea en que directorio!
Me borra solo los .txt?
el codigo lo pego un txt y guarcdo el archivo con que extensión?
Gracias!
Saludos!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 12 Agosto 2008, 19:35 pm
El script trabaja con todos los archivos (sin importar el tipo) que se encuentran en el directorio c:\export, y revisa que la fecha de creación del archivo, sea anterior a un mes, si es igual o anterior, los elimina  :P

El primer archivo es un *.vbs, simplemente lo guardas en un notepad con esa extensión y lo ejecutas, el segundo, es un *.bat, que se encarga de generar el *.vbs, así que simplemente hay que guardarlo como *.bat, y listo....

Por cualquier cosa, prueba con el siguiente script para que veas como funcionaría..

Código
  1. set objfso = createobject("scripting.filesystemobject")
  2. 'creamos el objeto que se encarga de manejar archivos
  3. set carpeta = objfso.getfolder("c:\export")
  4. 'obtenemos la carpeta
  5. set archivos = carpeta.files
  6. 'obtenemos los archivos dentro de la carpeta
  7.  
  8. for each a in archivos
  9. 'por cada archivo
  10. if datediff("m",a.datecreated,now()) >= 1 then
  11. 'si la diferencia en meses de hoy, y la fecha de creacion es igual o mayor a un mes
  12. msgbox a.path & chr(13) & "Fecha: " & a.datecreated & chr(13) & chr(13) & "Sería eliminado"
  13. else
  14. msgbox a.path & chr(13) & "Fecha: " & a.datecreated & chr(13) & chr(13) & "NO sería eliminado"
  15. end if
  16. 'un par de mensajes en caso de positivo y negativo
  17. next
Lo que he hecho es sustituír la orden de borrar, por un simple mensaje  ;)
Dicho mensaje, saltará por cada uno de los archivos  :-X

Saludos

Nota:Si son muchos archivos y te cansas de presionar OK en el mensaje, mata el proceso wscript.exe XD


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 13 Agosto 2008, 01:39 am
Muchas gracias estuve probando y funciona, pero se me complico en una cosa!
Dentro de la carpeta "c:\export\" tengo 40 subcarpetas, es posible que el archivo busque dentro de cada subcarpeta y haga el mismo trabajo, pero sin que me elimine las carpetas, poque hacer un scpriot diferente por carpeta, seria muy desprolijo!

Ya que esta te hago una consulta:
Se puede enviar un mail con script .VBS?
Gracias saludos!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 13 Agosto 2008, 01:50 am
Perdona que te moleste, pero me queda una duda.
En que parte del script "asignas la antiüedad del archivo"? (es una pregunta tonta, pero me queda la duda!

Y si mis pocos conocimientos de BAT no me fallan cuando te referis a empaquetarlo en un BAT, lo que hace el BAT (el que pusistes de ejemplo) es, crearme el archivo.vbs y ejecutarlo, despues lo borra no?
Lo crea en la carpeta %temp%? (Seria esta: "C:\Documents and Settings\Administrador\Configuración local\Temp")
Gracias!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 13 Agosto 2008, 02:11 am
Citar
Dentro de la carpeta "c:\export\" tengo 40 subcarpetas, es posible que el archivo busque dentro de cada subcarpeta y haga el mismo trabajo, pero sin que me elimine las carpetas
Eso no habría problemas,es sencillo, si es solo eso avisa y te dejo el code  ;D

Citar
Se puede enviar un mail con script .VBS?
Con *.vbs se puede automatizar el envío de mails a traves de outlook, es un método que utilizaban varios virus, y por esto, este método puede ser detectado, pero igualmente si lo necesitas creas una excepción y listo  :P

Citar
En que parte del script "asignas la antiüedad del archivo"?
He comentado el anterior code  ;)

Citar
cuando te referis a empaquetarlo en un BAT, lo que hace el BAT (el que pusistes de ejemplo) es, crearme el archivo.vbs y ejecutarlo, despues lo borra no?

Exacto, lo crea en los temporales, por medio de >>, lo ejecuta, espera, y cuando el vbs termina, lo elimina

Espero haberte ayudado..

Saludos



Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 13 Agosto 2008, 03:13 am
La verdad me estas ayudando demasiado, porque script en BASIC no recuerdo nada, ando mejor en los BAT....

Te pido si me podes dejar el code por el tema de las subcarpetas!

y te comento mi error al ejecutar el codigo:

Si ejecuto el codigo de prueba (el que no elimina solo muestra el cartel) funciona perfecto, me dice #este se elimina" este "no"..... etc

Pero si ejecuto el codigo verdaero, no me elimina nada y aparece el siguiente error:

Secuencia de comando:     C:\........ (ruta del VBS)
LInea: 7
Caracter: 3
Error Permission denied
Codigo: 800A0046
Origen: Microsoft VBScript runtime error

Quien me nieha el permiso? (creo que es eso)
Gracias un aves mas!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 13 Agosto 2008, 03:19 am
que tonto fui, no me hagas caso con respecto al error, ya lo solucione, esta tratando de borrar unos archivos de prueba, y un archivo era de systema!
Ayudame con lo otro, gracias!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 13 Agosto 2008, 03:24 am
Ok, entonces te dejo el code para las subcarpetas  :P

Código
  1. set objfso = createobject("scripting.filesystemobject")
  2. set directorio = objfso.getfolder("c:\export")
  3.  
  4. set dirfiles = directorio.files
  5. for each d in dirfiles
  6. if datediff("m",d.datecreated,now()) >= 1 then
  7. objfso.deletefile(d.path)
  8. end if
  9. next
  10.  
  11. set subcarpetas = directorio.subfolders
  12. for each carpeta in subcarpetas
  13. set archivos = carpeta.files
  14. for each a in archivos
  15. if datediff("m",a.datecreated,now()) >= 1 then
  16. objfso.deletefile(a.path)
  17. end if
  18. next
  19. next
  20.  
Tener en cuenta que este SI borra
En todo caso, cambiar objfso.deletefile(a.path), por msgbox a.path si se quieren hacer pruebas
Saludos  ;)

P.D: el script no toma en cuenta subcarpetas, dentro de las subcarpetas, ni tampoco, los archivos sueltos dentro del directorio principal, sino que va derecho a las carpetas, si es necesario, avisame y lo cambio en este mismo post


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 13 Agosto 2008, 03:37 am
Funciona de maravilla, si no me equivoco este ultimo codigo solo elimina lo que se encuentra dentro de las subcarpetas, no la carpeta principal.
Asi me funciono a mi, entonces ejecuto primero un codigo y luego el otro, pero funciono de maravilla.

Mi explicarias el tema del mail, la idea seria que el script busque en el directorio los 2 ultimos archivos .txt crados recientemente, y los envie por mail..
Es posible?
Gracias!
Prometo devolverte la ayuda, garcias!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 13 Agosto 2008, 03:53 am
Citar
Funciona de maravilla, si no me equivoco este ultimo codigo solo elimina lo que se encuentra dentro de las subcarpetas, no la carpeta principal.
Asi me funciono a mi, entonces ejecuto primero un codigo y luego el otro, pero funciono de maravilla.

No es necesario que ejecutes primero uno y después otro, ya he modificado el code, revisalo, justamente por eso dije..
Citar
el script no toma en cuenta subcarpetas, dentro de las subcarpetas, ni tampoco, los archivos sueltos dentro del directorio principal, sino que va derecho a las carpetas
:-X

Citar
Mi explicarias el tema del mail, la idea seria que el script busque en el directorio los 2 ultimos archivos .txt crados recientemente, y los envie por mail..
Es posible?
Como te comento, sería posible, pero para eso deberías de tener outlook en la pc.
En caso de tenerlo, necesito hacer memoria  :-X, ya que no lo recuerdo exactamente en este momento  :xD

Saludos

P.D: los txt son muy largos? que tipo de cuenta de correo es la destinataria, una cuenta empresarial? por que no envíar el contenido del archivo en el cuerpo del mensaje?


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 13 Agosto 2008, 04:42 am
el Outlook esta instalado, y si es nesesario se creea una cuenta de mail en Microsoft Outlook 2003/2007 o Outlook Express.
Los txt tienen "1_0017_080601_080630.txt" un nombre como este, solamente varian los números, y no llegan a pesar 1MB.
La cuenta no es empresarial, es simplemente para hacer unas pruebas, se creara una cuenta de correo nuevo.

Si tansolo se pudiera enviar el contenido del txt como mensaje, seria lo mismo.
da igual enviar los 2 txt adjuntos, o el contenido de los txt como mail.

Yo quise hacerlo por BAT con TELNET pero no funciono.
Espero puedas ayudarme, saludos.
Gracias! ::)


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 13 Agosto 2008, 16:59 pm
Esta relacionado al último code? o va de cero?, digo porque si es un code separado, hay que declarar los objetos y todo de nuevo, además de que el proceso de verificar cuales son los dos archivos más nuevos, puede hacerse junto al resto del code  :P

Saludos


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 13 Agosto 2008, 17:14 pm
Si esta relacionado con el ultimo code, la idea es que saque los dos ultimos txt de la carpeta export, y no9 de las subcarpetas!!!!
Osea que borre los archivos viejos (code anterior) de la carpeta principal y subcarpetas, y luego envie un mail con los 2 ultimos txt (como te explique antes) de la carpeta export!
Gracias, saludos..
Si es mas facil hacerlo separado, no hay problema...


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 26 Agosto 2008, 17:30 pm
Hola, como estas?
tanto tiempo, mira, estuve viendo el codigo, y quiero hacerle una modificacion.

set objfso = createobject("scripting.filesystemobject")
set directorio = objfso.getfolder("c:\export")
 
set dirfiles = directorio.files
for each d in dirfiles
      if datediff("m",d.datecreated,now()) >= 1 then
         objfso.deletefile(d.path)
      end if
next
 
set subcarpetas = directorio.subfolders
for each carpeta in subcarpetas
   set archivos = carpeta.files
      for each a in archivos
         if datediff("m",a.datecreated,now()) >= 1 then
         objfso.deletefile(a.path)
         end if
      next
next

Este fue el ultimo code que me pasastes y como me mencionabas necesito que busque destro de las subcarpetas.
gracias!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 26 Agosto 2008, 21:08 pm
Buenas... podría meterme ha hacer for.. pero creo que haciendo uso de la línea de comandos es más sencillo....  :P

Código
  1. set objshell = createobject("wscript.shell")
  2. objshell.run "cmd /c dir c:\export /s /b > templist.txt",vbhide
  3. wscript.sleep 2000
  4. 'listamos los archivos por línea de comandos, y guardamos el listado en un archivo temporal
  5. 'luego hacemos una pausa de dos segs para que se cree correctamente el archivo
  6.  
  7. set objfso = createobject("scripting.filesystemobject")
  8. set temp = objfso.opentextfile("templist.txt",1)
  9. 'abrimos el archivo temporal
  10.  
  11. do until temp.atendofstream
  12. fi = temp.readline
  13. 'leemos cada una de las líneas del archivo
  14. if objfso.fileexists(fi) = true then
  15. if objfso.getfile(fi).parentfolder.name <> Registros then
  16. 'si existe el archivo (para evitar que sea una carpeta) y la carpeta en la que esta es diferente de Registros
  17. if datediff("m",objfso.getfile(fi).datecreated,now()) >= 1 then
  18. msgbox objfso.getfile(fi).path
  19. 'revisamos la fecha y si tiene más de un mes (tomando en cuenta la fecha de hoy), lo borramos
  20. end if
  21. end if
  22. end if
  23. loop
  24. temp.close
  25. 'cerramos el archivo temporal

Para verlo en funcionamiento con simples mensajes, cambia....
Código
  1. objfso.deletefile(objfso.getfile(fi).path)
por esto...
Código
  1. msgbox objfso.getfile(fi).path

Saludos  ;)


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 26 Agosto 2008, 21:34 pm
Fallo, mira te cuento.
al ejecutar el script, lee el directorio, y me crea el txt con lo que encuentra, pero al momento de borrar tira un error y no hace nada.

Error:
Linea: 14
Caracter: 2
Error: Archivo no encontrado
codigo: 800A0035

otra duda, despues de ejecutarse, el txt se borra?
gracias!
Yo pense en usar un FOR pero como no entiendo casi nada de VBS..
te doy una idea, con variables se podra?
saludos


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 26 Agosto 2008, 21:54 pm
Una tontería.... la verdad.. ni lo había probado  :xD... ya he modificado el anterior código, prueba ahora  ;)

Después de ejecutarse, el txt no se borra.. pero da igual.. ya que en la próxima ejecución es sobreescrito  :P

Saludos


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 26 Agosto 2008, 21:57 pm
ok, cuaNDO QUIERAS, LO ESPERO... SALUDOS
Y GRACIAS!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 27 Agosto 2008, 02:55 am
Mira he probado y funciona de maravilla, lo que hice es cambiar la linea:

msgbox objfso.getfile(fi).path

por:

objfso.deletefile(objfso.getfile(fi).path)

y me elimina los archivos, el problema es que elimina y aparece un "msgbox" con el nombre de archivo que va eliminando y me obliga a hacer click en "Aceptar"

probe cambiando el "msgbox if" por un "delete if" y no funciono.
La idea es que sea automatico!
Gracias! saludos!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 27 Agosto 2008, 03:38 am
 :xD... ooootra vez.... la vez pasada fue porque no lo había probado.. y esta vez por probarlo  :xD, me olvide de quitar un mensaje  :-[
Finalmente... revisa el code.. que ya lo he modificado  ;D


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 27 Agosto 2008, 04:30 am
Probado y aprobado, funciono de maravillas, porque la otra ves tuve que editarlo por cada carpeta que tenia, y era bastante largo el codigo..
Muchas Gracias! despues posteo el proyecto realizado completo y explico que hace!
Saludos!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 27 Agosto 2008, 15:33 pm
Hola maestro como va, tengo un ultmo problema, te cuento:
el tema es que empaquete el script en un BAT pero me falla y el problema es desde la linea:

if objfso.getfile(fi).parentfolder.name <> Registros then

el problema es que yo hago asi
 le agrego el echo CODIGO >> del.vbs

pero como el codigo ya tiene un > no me lo exporta.
como puedo soluciobarlo?
gracias saludos!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 27 Agosto 2008, 16:14 pm
Bueno... eso si no lo voy a hacer yo... te dejo el trabajo....  :-X
Pero el problema esta aquí.... como ya has visto.. hay caracteres que son utilizados con otros fines por ms-dos... por lo que funciones de *.vbs, como set deben de ser escapadas con ^... ej:
Código
  1. echo ^set objfso = createobject(scripting.filesystemobject") >> del.vbs
  2. echo if objfso.getfile(fi).parentfolder.name ^<^> Registros then >> del.vbs

Saludos

P.D:Como he comentado... los "set" también deben de ser escapados.. ya que echo set es propio de ms-dos  ;)


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 27 Agosto 2008, 16:56 pm
no problem, gracias de todos modos! saludos!
posteare este problema!
saludos!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: Novlucker en 27 Agosto 2008, 17:19 pm
Citar
posteare este problema!
Que es lo que debes postear? si ya te he dado la respuesta...  :¬¬

^<---esto esta en el ej anterior

Saludos


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: elecktra en 27 Agosto 2008, 17:52 pm
ahora si, yo habia probado pero oniendolo el simbolo despues de echho, pero iva antes del simbolo!
saludos
gracias!


Título: Re: Borrar Archivos segun su fecha en BAT!
Publicado por: javor en 18 Febrero 2009, 17:47 pm
Hola soy nuevo en el foro y he visto que en temas de vbs, soy muy buenos y como tengo una duda, queria a ver si alguien me puede ayudar.
Yo necesitaria lo mismo que hace el script que se indica en este tema, pero yo lo que necesito no es borrar el resultado si no que es moverlo a una carpeta o incluso mas dificil, comprimierlo en un zip o rar. SI alguien me puede ayudar, se lo agradeceria mucho.

Saludos


Título: Re: [Batch] Borrar Archivos segun su fecha
Publicado por: dvreggionx en 10 Mayo 2011, 22:43 pm
que complicado....

aca tenes una Solucion mas simple

Código:
forfiles /p "C:\CarpetaDeseada" /S /M *.* /D -5 /c "cmd /c del @path"

*.* se puede reemplazar por algun nombre en especial o por alguna extensión en especial por ejemplo *.exe
-5 son la cantidad de dias de antiguedad por ejemplo asi como esta ahora te va a borrar todos los archivos con una antiguedad mayor a 5 dias

esa linea editala a tu gusto, guardala desde un notepad como ScritBorraArchivosViejos.bat
y si queres que se ejecute todos los dias hacelo desde las tareas programadas de windows


Título: Re: [Batch] Borrar Archivos segun su fecha
Publicado por: walterio en 8 Octubre 2013, 20:08 pm
Novlucker Disculpa las molestias, te hago 2 preguntitas:
La primera: me explicas como es el tema de los script? uno es un bat y el otro un vbs? Uno llama al otro? tienen que tener algun nombre en particular?
La segunda: Como modificar el script para que borre archivos mas antiguos que una cierta cantidad de días (en vez de un mes)

Muchas Gracias!


Título: Re: [Batch] Borrar Archivos segun su fecha
Publicado por: Eleкtro en 8 Octubre 2013, 22:13 pm
@walterio

Porfavor lee las normas del foro para no revivir más posts de hace 5 años para formular preguntas...

Tampoco especificas a que código exacto de Novlucker te refieres, ¿él y los demás tenemos que leer todas las respuestas en las dos páginas del hilo para adivinarlo?...

A preguntas sin detalles, respuestas simples:

Código:
' Ejemplo: 5 días
if datediff("d", file.datecreated,now()) >= 5 then ...
-> http://www.w3schools.com/vbscript/func_datediff.asp

PD: No revivas posts muertos, puedes formular una nueva pregunta citando cualquier código de este hilo si deseas.

Saludos


Título: Re: [Batch] Borrar Archivos segun su fecha
Publicado por: walterio en 8 Octubre 2013, 22:48 pm
Perdón, pregunte sin leer las normas
Mis disculpas