Delete files older that 'X' days in specific folder

Delete files older that 'X' days in specific folder

jpCADconsulting
Advocate Advocate
367 Views
4 Replies
Message 1 of 5

Delete files older that 'X' days in specific folder

jpCADconsulting
Advocate
Advocate

Hi folks. I had some LISP in acad.doc that would delete all files in "C:\_AutoSave" that are older than 180 days on launch of AutoCAD.

 

It used to work -- I think. Here is the code. It just reports 'nil' and does nothing.

 

Any light you can shine on this for me is greatly appreciated.

 

(foreach file
           (mapcar (function (lambda (x) (strcat "C:/_AutoSave/" x)))
                   (vl-directory-files "C:/_AutoSave/" "*.*" 1)
           )
    (if (not (vl-file-systime file))
      (prompt (strcat "\n** No systime for \"" file "\" ** "))
    )
  )

 

0 Likes
368 Views
4 Replies
Replies (4)
Message 2 of 5

pbejse
Mentor
Mentor

 

This line doesn't do anything except evaluate if the variable file does not evaluate to nil

...
(if (not (vl-file-systime file))
      (prompt (strcat "\n** No systime for \"" file "\" ** "))
    )
...

There's something missing in the code you posted @jpCADconsulting 

 

0 Likes
Message 3 of 5

paullimapa
Mentor
Mentor

modify the code here to suit your needs

 


Paul Li
IT Specialist
@The Office
Apps & Publications | Video Demos
0 Likes
Message 4 of 5

Moshe-A
Mentor
Mentor

@jpCADconsulting  hi,

 

here is a fix to your code

 

to find the difference between dates i assumed :

1 year contains 365 days in average

1  month contains 30 days in average 

 

to calculate the exact days is another 'story' 😀

 

enjoy

Moshe

 

(defun delete_older_files (/ elapses_days ; local function
			     fname f sysTime^ fileTime^ days0 days1 file)

 ; anonymous function
 (setq elapsed_days (lambda (lst) (+ (* (car lst) 365) (* (cadr lst) 30) (cadddr lst))))

       
 (setq fname (vl-filename-mktemp)) ; temporay file name
 (setq f (open fname "w"))
 (setq f (close f))

 (setq sysTime^ (vl-file-systime fname))
 (setq days0 (elapsed_days sysTime^))
  
 (foreach file (mapcar (function (lambda (x) (strcat "C:/_AutoSave/" x)))
		      					(vl-directory-files "C:/_AutoSave/" "*.*" 1))
  
  (if (not (setq fileTime^ (vl-file-systime file)))
   (prompt (strcat "\n** No systime for \"" file "\" ** "))
   (progn
    (setq days1 (elapsed_days fileTime^))

    (if (> (- days0 days1) 180)
     (vl-file-delete file)
    )
   ); progn
  ); if
 ); foreach
); delete_older_files

 

 

0 Likes
Message 5 of 5

jpCADconsulting
Advocate
Advocate

Yeah, I didn't know why I didn't see that. Totally obvious now. 😉

0 Likes