Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Sanzman en 27 Mayo 2013, 12:09 pm



Título: [VBS] Borrar ficheros de un directorio y dejar solamente el último creado.
Publicado por: Sanzman en 27 Mayo 2013, 12:09 pm
Muy buenas!!!!

Tengo un problemilla y no sé como solucionarlo. Resulta que mediante FTP me descarga el contenido de un directorio en un servidor y lo copio localmente a otra carpeta. Acto seguido me gustaría que eliminara todos los archivos excepto el último creado. En el servidor ftp cada archivo fue creado en días diferentes pero al copiarlo a  mi pc los archivos aparecen con la misma fecha de creación, por lo que el código que uso no me vale:

Código
  1. Option Explicit
  2. Dim strFolder
  3. Dim objFolder
  4. Dim colFiles
  5. Dim objFile
  6.  
  7. Const FOR_READING = 1
  8. strFolder = "C:\Temporal"
  9. Set objFSO = CreateObject("Scripting.FileSystemObject")
  10. Set objFolder = objFSO.GetFolder(strFolder)
  11. Set colFiles = objFolder.Files
  12. For Each objFile In colFiles
  13. If DateDiff("D", objFile.DateLastModified, Now) > 1 Then objFile.Delete 'Esta linea
  14. 'indica que borre solo los archivos con mas de 1 día de antiguedad
  15. 'objFile.Delete Con esto lo borramos todo
  16. Next

Como veis no borraría ninguno porque todos han sido creados el mismo día. Entonces como alternativa, como los archivos los va creando en el siguiente orden:

CText001.csv
CText002.csv
CText003.csv....

Me gustaría hacer un bucle que recorriera los nombres y borraras excepto el que tenga el valor más alto, en este caso el CText003.csv

O sí mediante un bat en vez copiar todo el directorio copiar sólo el último archivo creado. Espero que podáis ayudarme o darme alguna idea.

Gracias




[MOD]: Usa el botón de insertar código.


Título: Re: [VBS] Borrar ficheros de un directorio y dejar solamente el último creado.
Publicado por: Eleкtro en 27 Mayo 2013, 16:47 pm
Me gustaría hacer un bucle que recorriera los nombres y borraras excepto el que tenga el valor más alto, en este caso el CText003.csv

Si la enumeración es como indicas entonces puedes hacerlo de la siguiente manera sin peligro:

Código
  1. @Echo OFF
  2. For /F "Tokens=*" %%# in ('Dir /B "*.csv" ^| Sort /R') Do (
  3. For /F "Tokens=*" %%@ in ('Dir /B "*.csv" ^| FIND /V "%%#"') Do (Del /Q "%%@")
  4. )

El código sirve si la enumeración es del siguiente tipo:
Código:
csv001
csv002
csv100

No sirve si la enumeración es de este tipo:
Código:
csv1
csv2
csv100

Saludos


Título: Re: [VBS] Borrar ficheros de un directorio y dejar solamente el último creado.
Publicado por: Sanzman en 28 Mayo 2013, 08:50 am
Ya lo he solucionado ;)
Gracias