vbscript - Runtime error 800A0005 when trying to delete file -


i'm receiving following error when run .vbs:

script: c:\users\me\desktop\delete.vbs
line: 21
char: 1
error: invalid procedure call or argument
code: 800a0005
source: microsoft vbscript runtime error

here code.

set objfso = createobject("scripting.filesystemobject") set objfolder = objfso.getfolder("c:\users\plex\downloads\completed\")  intfoldersize = int(((objfolder.size / 1024) / 1024) / 1024)  while intfoldersize >= 79   stroldestfile = ""   dtmoldestdate =    set colfiles = objfolder.files    each objfile in colfiles     strfile = objfile.path     dtmfiledate = objfile.datecreated     if dtmfiledate < dtmoldestdate       dtmoldestdate = dtmfiledate       stroldestfile = strfile     end if   next    objfso.deletefile(stroldestfile)    intfoldersize = int(((objfolder.size / 1024) / 1024) / 1024) loop 

the error on line objfso.deletefile(stroldestfile).

could tell me why, , how fix it?

stroldestfile seems string of 0 length initialized in stroldestfile = "" statement.

size property

for files, returns size, in bytes, of specified file. folders, returns size, in bytes, of files , subfolders contained in folder.

object.size

the object file or folder object

you either iterate files in subfolders or end loop follows:

if stroldestfile = ""     wscript.echo "no file delete"     intfoldersize = 0                 ' end loop                                       ' or recurse subfolders                                       ' or choose strategy @ else     objfso.deletefile(stroldestfile)     intfoldersize = int(((objfolder.size / 1024) / 1024) / 1024) end if 

next script should work:

option explicit on error goto 0  dim strresult: strresult = wscript.scriptname dim objfso, stroldestfile, dtmoldestdate, strfolder, ofolder, intfoldersize set objfso = createobject("scripting.filesystemobject")     dtmoldestdate =     strfolder = "c:\users\plex\downloads\completed\"     stroldestfile = ""  set ofolder = objfso.getfolder( strfolder)  intfoldersize = int(((ofolder.size / 1024) / 1024) / 1024)  'do while intfoldersize >= 79   stroldestfile = ""   dtmoldestdate =    findoldestfile ofolder    'objfso.deletefile(stroldestfile)   strresult = strresult & vbnewline & dtmoldestdate & vbtab & stroldestfile     intfoldersize = int(((ofolder.size / 1024) / 1024) / 1024)  'loop  wscript.echo strresult wscript.quit  sub findoldestfile( objfolder)   dim objfile, colfiles, colfolders, strfile, dtmfiledate   ' find oldest file   set colfiles = objfolder.files   each objfile in colfiles     strfile = objfile.path     dtmfiledate = objfile.datecreated     if dtmfiledate < dtmoldestdate       dtmoldestdate = dtmfiledate       stroldestfile = strfile     end if   next   ' recurse subfolders   set colfolders = objfolder.subfolders   each objfile in colfolders     findoldestfile objfile   next end sub 

note there commands commented debugging purposes (do while, loop, deletefile); oldest file echoed instead.

above code not optimized in sense; maybe better be, avoid rereading filesystem attributes repeatedly:

  • create array of file paths , dates , sizes,
  • sort order such array dates, , then
  • delete files summing deleted size…

edit: full code basic error handling

option explicit on error goto 0  dim strresult: strresult = wscript.scriptname dim objfso, dtmoldestdate, strfolder, ofolder, intfoldersize dim ii, intsizetodele, arraux, arrfilessorted, arrfilesunsort()     ii = -1     strfolder = "d:\test"                     ' "c:\users\plex\downloads\completed\"     dtmoldestdate =    set objfso  = createobject("scripting.filesystemobject")   set ofolder = objfso.getfolder( strfolder)    findallfiles ofolder   arrfilessorted = bubblesort(arrfilesunsort,"")   intfoldersize  = ofolder.size   intsizetodele  = int(intfoldersize / 50)   ' redefine match need   strresult = strresult & vbtab & ii _     & vbtab & intsizetodele & vbtab & intfoldersize   ii = 0 ubound( arrfilessorted)     arraux = split( arrfilessorted( ii), "|")     strresult = strresult & vbnewline & ii _       & vbtab & arraux(0) _       & vbtab & arraux(1) _       & vbtab & arraux(2)     on error resume next                      ' basic error handling - start       ''''' objfso.deletefile(arraux(2))      ' uncomment no sooner debugged       if err.number = 0        else         strresult = strresult & vbnewline & ii _           & vbtab & cstr(err.number) & " (0x" & hex(err.number) & ") " & err.description       end if     on error goto 0                           ' basic error handling - end     intsizetodele = intsizetodele - arraux(1)     if intsizetodele <= 0 exit     next   strresult = strresult & vbnewline & ii _     & vbtab & intsizetodele & vbtab & intfoldersize  wscript.echo strresult wscript.quit  sub findallfiles( objfolder)   dim objfile, colfiles, colfolders   ' find files   set colfiles = objfolder.files   each objfile in colfiles     ii = ii + 1     redim preserve arrfilesunsort(ii)     arrfilesunsort(ii) = timestamp( objfile.datecreated) & "|" & objfile.size & "|" & objfile.path   next   ' recurse subfolders   set colfolders = objfolder.subfolders   each objfile in colfolders     findallfiles objfile   next end sub  function bubblesort(byval arrdata,strsort) 'based on http://vbscripter.blogspot.cz/2008/03/q-how-do-i-sort-data-in-array.html 'input: arrdata = array of data. text or numbers. 'input: strsort = sort direction (asc or ascending or desc descending) 'output: array '   dim i, j, tempvalue   if not trim(ucase(strsort)) = "desc" strsort = "asc"    if strsort = "asc"       = 0 ubound(arrdata)           j = 0 ubound(arrdata) - 1               if  arrdata(j)   > arrdata(j+1)                   tempvalue    = arrdata(j+1)                   arrdata(j+1) = arrdata(j)                   arrdata(j)   = tempvalue               end if           next       next   else       = 0 ubound(arrdata)           j = 0 ubound(arrdata) - 1               if  arrdata(j)   < arrdata(j+1)                   tempvalue    = arrdata(j+1)                   arrdata(j+1) = arrdata(j)                   arrdata(j)   = tempvalue               end if                   next       next   end if     bubblesort = arrdata end function  function timestamp( tt) 'input:   tt = date (a variant of subtype date) 'output:  sortable, fixed-length string: date formatted yyyymmddhhmmss   timestamp = cstr( year (tt) & _     right("0" & month (tt),2) & _     right("0" & day   (tt),2) & _       right("0" & hour  (tt),2) & _     right("0" & minute(tt),2) & _         right("0" & second(tt),2)) end function 

Comments