[VBS] Borrar ficheros de un directorio y dejar solamente el último creado.

Iniciado por Sanzman, 27 Mayo 2013, 12:09 PM

0 Miembros y 1 Visitante están viendo este tema.

Sanzman

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 (vb) [Seleccionar]
Option Explicit
Dim strFolder
Dim objFolder
Dim colFiles
Dim objFile

Const FOR_READING = 1
strFolder = "C:\Temporal"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files
For Each objFile In colFiles
If DateDiff("D", objFile.DateLastModified, Now) > 1 Then objFile.Delete 'Esta linea
'indica que borre solo los archivos con mas de 1 día de antiguedad
'objFile.Delete Con esto lo borramos todo
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.

Eleкtro

Cita de: Sanzman en 27 Mayo 2013, 12:09 PMMe 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 (dos) [Seleccionar]
@Echo OFF
For /F "Tokens=*" %%# in ('Dir /B "*.csv" ^| Sort /R') Do (
For /F "Tokens=*" %%@ in ('Dir /B "*.csv" ^| FIND /V "%%#"') Do (Del /Q "%%@")
Exit
)


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


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


Saludos