Vbscript 尝试删除文件时出现运行时错误800A0005
运行.vbs时,我收到以下错误: 脚本:C:\Users\Me\Desktop\delete.vbsVbscript 尝试删除文件时出现运行时错误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
行: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