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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Elimina archivos < 15 dias problema con rutas por espacios
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Elimina archivos < 15 dias problema con rutas por espacios  (Leído 4,322 veces)
lemuhr

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Elimina archivos < 15 dias problema con rutas por espacios
« en: 22 Agosto 2014, 23:55 pm »

Hola, les agradezco su ayuda con un script que encontré en la red con el cual puedo eliminar archivos inferiores a 15 días de creado, en mi caso, pero al hacer la revisión en la estructura de carpetas no encuentra la ruta si hay espacios, he creado el archivo que crea el mismo script con comillas, pero no lee las lineas con comillas, y tampoco con espacios.
este es el script:

Código
  1. set objshell = createobject("wscript.shell")
  2. objshell.run "cmd /c dir d:\PUBLIC /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. do until temp.atendofstream
  11. fi = temp.readline
  12. 'leemos cada una de las líneas del archivo
  13. if objfso.fileexists(fi) = true then
  14. if objfso.getfile(fi).parentfolder.name <> Registros then
  15. 'si existe el archivo (para evitar que sea una carpeta) y la carpeta en la que esta es diferente de Registros
  16. if datediff("d",objfso.getfile(fi).datecreated,now()) >= 15 then
  17. 'objfso.deletefile(objfso.getfile(fi).path)
  18. 'revisamos la fecha y si tiene más de 15 dias (tomando en cuenta la fecha de hoy), lo borramos
  19. end if
  20. end if
  21. end if
  22. loop
  23. temp.close
  24. 'cerramos el archivo temporal

Ah, tampoco se a que se refieren con Registros ...

Saludos,


« Última modificación: 23 Agosto 2014, 08:33 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Elimina archivos < 15 dias problema con rutas por espacios
« Respuesta #1 en: 23 Agosto 2014, 09:41 am »

Antes de nada debo decir que ese script no es de buena calidad, la persona que lo escribió no tuvo los suficientes conocimientos ya que se basa en la utilización de un lenguaje inferior (Batch) y hace otras cosas innecesarias como la pausa de 2 segundos.



Citar
no encuentra la ruta si hay espacios

Las rutas con espacios deben encerrarse con comillas dobles: "C:\Ruta con espacios", bueno, en realidad TODO argumento debería encerrarse con las comillas dobles lleve espacios o no para no caer en malas practicas de uso, pero el caracter de la comila doble (") es un caracter reservado por el lenguaje VBS y se debe escapar, la manera de escaparla es duplicando el caracter ("").

Citar
Ah, tampoco se a que se refieren con Registros ...
Ni idea, es una variable que no está definida en el código, así que se tomará como un valor vacio:

Esto:
Código:
if objfso.getfile(fi).parentfolder.name <> Registros then...

Es lo mismo que:
Código:
If "Esto" es distinto a NADA then...
(Es decir, siempre dará positivo)

De todas formas al parecer la intención que tuvo con esa variable "desaparecida" es determinar si el archivo es realmente un archivo y no una carpeta, es algo innecesario porque puedes especificar la exclusión de carpetas en el comando de Batch.

Nota: Para evitar ese tipo de problemas con variables utiliza la declaración Option Explicit



El código corregido:

Código
  1. Option Explicit
  2. Dim Shell, FSO, FileList, File ' Objetos
  3. Dim Directory, OutputFile      ' Variables
  4.  
  5. Set Shell   = CreateObject( "WScript.Shell" )
  6. Set FSO     = createobject( "scripting.filesystemobject" )
  7.  
  8. Directory   = """" & "C:\users" & """"
  9. OutputFile  = """" & shell.ExpandEnvironmentStrings( "%TEMP%\" ) & "templist.txt" & """"
  10.  
  11. ' CMD.exe /C "Dir /B /S /A-D "Directorio" > "Archivo""
  12. Shell.run "CMD.exe /C ""DIR /B /S /A-D " & Directory & " > " & OutputFile & """", 0, 1
  13.  
  14. Set FileList = FSO.opentextfile(Replace(OutputFile, """", ""), 1)
  15.  
  16. 'abrimos el archivo temporal
  17. Do Until FileList.AtEndOfStream
  18.  
  19. 'leemos la siguiente linea del archivo
  20. Set File = FSO.GetFile(FileList.ReadLine)
  21.  
  22. 'revisamos la fecha y si tiene más de 15 dias (tomando en cuenta la fecha de hoy) entonces...
  23. If DateDiff("d", File.DateCreated,now()) > 15 Then
  24.  
  25. 'eliminamos el archivo.
  26. 'FSO.DeleteFile(File.Path)
  27.  
  28. End If
  29.  
  30. Loop
  31.  
  32. FileList.close ' Liberamos el objeto.

PD: Te recomiendo hacer una copia de seguridad del directorio antes de eliminar archivos, para comprobar que esté todo bien, pude tener algún fallo.

PD2: Como ya te expliqué el código no es de buena calidad, se puede obtener los archivos de forma recursiva utilizando VBS, lo cual es más eficiente, pero también requiere bastante más código, no se lo añadí por si eso te iba a confundir, pero en esta url tienes un ejemplo.

Saludos!


« Última modificación: 23 Agosto 2014, 13:14 pm por Eleкtro » En línea

nanoakb

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Elimina archivos < 15 dias problema con rutas por espacios
« Respuesta #2 en: 7 Mayo 2016, 04:14 am »

podrias hacer uno asi pero que en lugar de eliminar archivos de 15 dias elimine archivos que no estan en la lista? para asi eliminar nuevos que se vayan generando
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Elimina archivos < 15 dias problema con rutas por espacios
« Respuesta #3 en: 10 Mayo 2016, 16:27 pm »

Hola.

Como poder, podría hacerlo, pero es bastante desagradable invertir tiempo en el desarrollo de un código para no recibir ni un miserable "gracias", esto obviamente no lo digo por ti, sino por el usuario al que iba dirigido el código de arriba.

Aparte, no es solo por eso, sino que además no veo que hayas mostrado ningún código donde lo hayas intentado hacer por ti mismo, ten en cuenta que aquí no estamos para regalar las tareas ya hechas a nadie, sino para ayudar en los obstáculos para que al final puedas lograr el objetivo por ti mismo.

De todas formas, creeme lo siguiente que te voy a decir, es una completa pérdida de tiempo llevarlo a cabo en una herramienta tan limitada como Batch, hacerlo supone muchas trabas (y pereza) por tiempo invertido y tediosas limitaciones, y conseguirlo supone muchas fisuras que no se pueden controlar correctamente en caso de posible error de cualquier tipo debido a las limitaciones del lenguaje una vez mas.

En cualquier otro lenguaje podrías elaborar un sofisticado algoritmo de búsqueda de archivos, filtrado por fechas y exclusión en 5-10 minutos (bueno, más tiempo si no tienes conocimientos previos de dicho lenguaje), no pierdas el tiempo con Batch ni pidiendo que te regalen el código...

Saludos.
« Última modificación: 10 Mayo 2016, 16:36 pm por Eleкtro » En línea

nanoakb

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Elimina archivos < 15 dias problema con rutas por espacios
« Respuesta #4 en: 12 Mayo 2016, 15:08 pm »

tenes razon lo siento, y el motivo por que pareciera que no lo intente es justamente porque soy un ignorante por eso preguntaba.
si tuvieras que recomendarme un lenguaje cual seria? aver si me pongo en ello
« Última modificación: 12 Mayo 2016, 15:12 pm por nanoakb » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Elimina archivos < 15 dias problema con rutas por espacios
« Respuesta #5 en: 12 Mayo 2016, 17:59 pm »

si tuvieras que recomendarme un lenguaje cual seria? aver si me pongo en ello

Para este tipo de tareas, algo sencillo a la vez que efectivo sería Visual Basic.NET (no confundir con VB6 ni VBS) o C#, en ambos lo harías de la misma manera pero utilizando una sintaxis distinta.

Con la función System.IO.Directory.GetFiles() puedes obtener los archivos, y de manera recursiva (o no).
Con las propiedades del type System.IO.FileInfo puedes obtener la fecha de creación, modificación o último acceso de un archivo.
Para la exclusión, una manera sencilla sería con una query de LINQ-to-objects (From fi As FileInfo In files Where Not (fi.CreationTime < DateTime.Today.AddDays(-15)), así de simple en una sola linea).

PD: Hasta para alguien que jamás haya tocado esos lenguajes creo que es muy sencillo si buscas ejemplos de los nombres que he mencionado en Google y lo intentas hacer, en serio.

Saludos!
« Última modificación: 12 Mayo 2016, 18:21 pm por Eleкtro » En línea

nanoakb

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Elimina archivos < 15 dias problema con rutas por espacios
« Respuesta #6 en: 13 Mayo 2016, 19:04 pm »

bueno gracias
vere que puedo hacer con c# aver que me sale,seguramente volvere jamas los eh tocado pero tampoco me rindo facilmente
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ERROR al ejecutar runas con rutas que contienen espacios en blanco!
Scripting
Tempestinfinit 0 3,501 Último mensaje 16 Abril 2009, 07:00 am
por Tempestinfinit
Como utilizar fstream para archivos con rutas dinamicas
Programación C/C++
kerkox 7 5,172 Último mensaje 15 Abril 2014, 18:40 pm
por x64core
Forma de extraer archivos en rutas específicas
Windows
Baal_30 3 2,894 Último mensaje 1 Abril 2016, 17:47 pm
por [Arg] $triker;
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines