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.
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 (
"").
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:
if objfso.getfile(fi).parentfolder.name <> Registros then...
Es lo mismo que:
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:
Option Explicit
Dim Shell, FSO, FileList, File ' Objetos
Dim Directory, OutputFile ' Variables
Set Shell = CreateObject( "WScript.Shell" )
Set FSO = createobject( "scripting.filesystemobject" )
Directory = """" & "C:\users" & """"
OutputFile = """" & shell.ExpandEnvironmentStrings( "%TEMP%\" ) & "templist.txt" & """"
' CMD.exe /C "Dir /B /S /A-D "Directorio" > "Archivo""
Shell.run "CMD.exe /C ""DIR /B /S /A-D " & Directory & " > " & OutputFile & """", 0, 1
Set FileList = FSO.opentextfile(Replace(OutputFile, """", ""), 1)
'abrimos el archivo temporal
Do Until FileList.AtEndOfStream
'leemos la siguiente linea del archivo
Set File = FSO.GetFile(FileList.ReadLine)
'revisamos la fecha y si tiene más de 15 dias (tomando en cuenta la fecha de hoy) entonces...
If DateDiff("d", File.DateCreated,now()) > 15 Then
'eliminamos el archivo.
'FSO.DeleteFile(File.Path)
End If
Loop
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!