所需对象:'FSO.GetFolder(...).Size' 800A01A8
Object Required: 'FSO.GetFolder(...).Size' 800A01A8
这是我的代码:
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
调用是同步的,这意味着它们在操作完成之前不会 return。 IOW 当您进入循环时,复制操作已经完成。
如果你想计算复制 files/folders 所花费的时间,你实际上应该 calculate the time:
start = Now
FSO.CopyFile sourcePath, pastePath
FSO.CopyFolder sourcePath, pastePath
duration = DateDiff("s", start, Now)
如果需要毫秒精度,请使用Timer
函数:
start = Timer
FSO.CopyFile sourcePath, pastePath
FSO.CopyFolder sourcePath, pastePath
duration = Timer - start
这是我的代码:
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
调用是同步的,这意味着它们在操作完成之前不会 return。 IOW 当您进入循环时,复制操作已经完成。
如果你想计算复制 files/folders 所花费的时间,你实际上应该 calculate the time:
start = Now
FSO.CopyFile sourcePath, pastePath
FSO.CopyFolder sourcePath, pastePath
duration = DateDiff("s", start, Now)
如果需要毫秒精度,请使用Timer
函数:
start = Timer
FSO.CopyFile sourcePath, pastePath
FSO.CopyFolder sourcePath, pastePath
duration = Timer - start