对象要求:'FSO.GetFolder(...)。尺寸'800A01A8

时间:2017-05-13 23:28:48

标签: vbscript windows-7

这是我的代码:

sourcePath = "C:\Users\DANI\Desktop\source\*.*"
pastePath  = "C:\Users\DANI\Desktop\dest\"

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile sourcePath, pastePath
FSO.CopyFolder sourcePath, pastePath

Set sourceSize = FSO.GetFolder(FSO.GetParentFolderName(sourcePath)).Size
Set first_pasteSize = FSO.GetFolder(pastePath).Size
Do Until sourceSize + first_pasteSize = pasteSize
    pasteSize = FSO.GetFolder(pastePath).Size   
    duration = duration + 1
    WScript.Sleep 1000
Loop
MsgBox "File copied successfully." & vbCrLf & "The process took: " & duration _
    & " seconds.", 0+64, "Success!"

我正在尝试创建一个VBS,将文件夹中的所有文件和文件夹复制到另一个文件夹中,并告诉您“文件已成功复制”。等结束了。 问题是,即使我设置FSO,它也会给我一个错误:

Line: 8; Error: Object Required: 'FSO.GetFolder(…).Size'; Code: 800A01A8

修改

如果我将代码更改为

,则错误消失
sourcePath = "C:\Users\DANI\Desktop\source\*.*"
pastePath  = "C:\Users\DANI\Desktop\dest\"

Set FSO = CreateObject("Scripting.FileSystemObject")

sourceSize = FSO.GetFolder(FSO.GetParentFolderName(sourcePath)).Size
first_pasteSize = FSO.GetFolder(pastePath).Size

FSO.CopyFile sourcePath, pastePath
FSO.CopyFolder sourcePath, pastePath

Do Until sourceSize + first_pasteSize = pasteSize
    pasteSize = FSO.GetFolder(pastePath).Size   
    duration = duration + 1
    WScript.Sleep 1000
Loop
MsgBox "File copied successfully." & vbCrLf & "The process took: " & duration _
    & " seconds.", 0+64, "Success!"

但我现在有另一个问题。我想计算复制文件所需的秒数,但每次运行代码时都要说1秒钟。

1 个答案:

答案 0 :(得分:0)

正如Hans Passant已经指出的那样,您不能使用User::func()关键字将原始数据类型(如整数)的值分配给变量。该关键字只能用于将对象分配给变量。

您更新的问题中的代码始终将复制时间报告为1秒,因为现在您首先计算SetsourceSize,然后复制文件,然后循环直到目标大小等于总和复制操作之前的源和目标文件夹大小。在循环的第一次迭代之后,这是正确的,因为first_pasteSizeCopyFile调用是同步的,这意味着它们在操作完成之前不会返回。 IOW当你进入循环时,复制操作已经完成。

如果您想计算复制文件/文件夹所需的时间,您实际应该calculate the time

CopyFolder

如果您需要毫秒精度,请使用Timer功能:

start = Now

FSO.CopyFile sourcePath, pastePath
FSO.CopyFolder sourcePath, pastePath

duration = DateDiff("s", start, Now)