Vbscript 所需对象:';FSO.GetFolder(…).Size';800A01A8

Vbscript 所需对象:';FSO.GetFolder(…).Size';800A01A8,vbscript,windows-7,Vbscript,Windows 7,这是我的代码: sourcePath = "C:\Users\USER\Desktop\source\*.*" pastePath = "C:\Users\USER\Desktop\dest\" Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile sourcePath, pastePath FSO.CopyFolder sourcePath, paste

这是我的代码:

sourcePath = "C:\Users\USER\Desktop\source\*.*"
pastePath  = "C:\Users\USER\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,它也会给我一个错误:


编辑:

如果我将代码更改为

sourcePath = "C:\Users\USER\Desktop\source\*.*"
pastePath  = "C:\Users\USER\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秒。

如前所述,您不能使用
Set
关键字将基本数据类型(如整数)的值分配给变量。关键字只能用于将对象分配给变量

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

如果要计算复制文件/文件夹所需的时间,实际上应:

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

start = Timer

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

duration = Timer - start

您必须删除SET关键字,Size不是对象。请使用SET关键字,因为
Size
不是对象。:-)
start = Timer

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

duration = Timer - start