Vbscript 尝试删除文件时出现运行时错误800A0005

Vbscript 尝试删除文件时出现运行时错误800A0005,vbscript,Vbscript,运行.vbs时,我收到以下错误: 脚本:C:\Users\Me\Desktop\delete.vbs 行:21 字符:1 错误:无效的过程调用或参数 代码:800A0005 来源:Microsoft VBScript运行时错误 这是代码 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder("C:\Users\PLEX\Downloads\Completed\") int

运行.vbs时,我收到以下错误:

脚本:C:\Users\Me\Desktop\delete.vbs
行:21
字符:1
错误:无效的过程调用或参数
代码:800A0005
来源:Microsoft VBScript运行时错误

这是代码

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder("C:\Users\PLEX\Downloads\Completed\")

intFolderSize = Int(((objFolder.Size / 1024) / 1024) / 1024)

Do While intFolderSize >= 79
  strOldestFile = ""
  dtmOldestDate = Now

  Set colFiles = objFolder.Files

  For Each objFile in colFiles
    strFile = objFile.Path
    dtmFileDate = objFile.DateCreated
    If dtmFileDate < dtmOldestDate Then
      dtmOldestDate = dtmFileDate
      strOldestFile = strFile
    End If
  Next

  objFSO.DeleteFile(strOldestFile)

  intFolderSize = Int(((objFolder.Size / 1024) / 1024) / 1024)
Loop
Set objFSO=CreateObject(“Scripting.FileSystemObject”)
设置objFolder=objFSO.GetFolder(“C:\Users\PLEX\Downloads\Completed\”)
intFolderSize=Int((objFolder.Size/1024)/1024)
当intFolderSize>=79时执行此操作
strOldestFile=“”
dtmOldestDate=Now
设置colFiles=objFolder.Files
对于colFiles中的每个objFile
strFile=objFile.Path
dtmFileDate=objFile.DateCreated
如果dtmFileDate
错误出现在行
objFSO.DeleteFile(strOldestFile)


有人能告诉我为什么,以及如何修复它吗?

strOldestFile
似乎是一个长度为零的字符串,在
strOldestFile=“”
语句中初始化

对于文件,返回指定文件的大小(以字节为单位)。对于 文件夹,返回所有文件和子文件夹的大小(以字节为单位) 包含在文件夹中

object.Size

对象始终是文件或文件夹对象

您可以迭代子文件夹中的文件,也可以按如下方式结束循环:

If strOldestFile = "" Then
    Wscript.Echo "No file to delete"
    intFolderSize = 0                 ' end loop
                                      ' or recurse to subfolders
                                      ' or choose another strategy at all
Else
    objFSO.DeleteFile(strOldestFile)
    intFolderSize = Int(((objFolder.Size / 1024) / 1024) / 1024)
End If
下一个脚本应该可以工作:

option explicit
On Error GoTo 0

Dim strResult: strResult = Wscript.ScriptName
Dim objFSO, strOldestFile, dtmOldestDate, strFolder, oFolder, intFolderSize
Set objFSO = CreateObject("Scripting.FileSystemObject")
    dtmOldestDate = Now
    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 = Now

  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
  For Each objFile in colFiles
    strFile = objFile.Path
    dtmFileDate = objFile.DateCreated
    If dtmFileDate < dtmOldestDate Then
      dtmOldestDate = dtmFileDate
      strOldestFile = strFile
    End If
  Next
  ' recurse subfolders
  Set colFolders = objFolder.SubFolders
  For Each objFile in colFolders
    FindOldestFile objFile
  Next
End Sub

谢谢你的回答,我如何迭代子文件夹中的文件?我想这就解决了我的问题。尝试运行新脚本,它返回脚本名称,以及“已完成下载”目录中最旧文件(在其子文件夹中)的日期、时间和名称,这是向前迈出的一步,但仍然没有删除任何内容。还尝试删除了前3个注释标记,这使我在第20行上的“权限被拒绝”。每个人都可以完全控制我的所有驱动器,而我是管理员,所以我猜错误又是来自空字符串。我已经写下了我想要实现的目标,非常感谢您帮助我找到一些可行的方法。
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 = Now

  Set objFSO  = CreateObject("Scripting.FileSystemObject")
  Set oFolder = objFSO.GetFolder( strFolder)

  FindAllFiles oFolder
  arrFilesSorted = BubbleSort(arrFilesUnSort,"")
  intFolderSize  = oFolder.Size
  intSizeToDele  = Int(intFolderSize / 50)   ' redefine to match your need
  strResult = strResult & vbTab & ii _
    & vbTab & intSizeToDele & vbTab & intFolderSize
  For ii = 0 To 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 than debugged
      If Err.Number = 0 Then 
      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 Then Exit For  
  Next
  strResult = strResult & vbNewLine & ii _
    & vbTab & intSizeToDele & vbTab & intFolderSize

Wscript.Echo strResult
Wscript.Quit

Sub FindAllFiles( objFolder)
  Dim objFile, colFiles, colFolders
  ' find all files
  Set colFiles = objFolder.Files
  For 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
  For 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 for descending)
'Output: Array
'
  Dim i, j, TempValue
  If Not Trim(UCase(strSort)) = "DESC" Then strSort = "ASC"

  If strSort = "ASC" Then
      For i = 0 to UBound(arrData)
          For j = 0 to UBound(arrData) - 1
              If  arrData(j)   > arrData(j+1) Then
                  TempValue    = arrData(j+1)
                  arrData(j+1) = arrData(j)
                  arrData(j)   = TempValue
              End If
          Next
      Next
  Else
      For i = 0 to UBound(arrData)
          For j = 0 to UBound(arrData) - 1
              If  arrData(j)   < arrData(j+1) Then
                  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 as 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