2017-05-13 7 views
0

Dies ist mein Code:Objekt erforderlich: ‚FSO.GetFolder (...) Size‘ 800A01A8

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!" 

ich ein VBS zu machen bin versucht, dass kopiert alle Dateien und Ordner aus einem Ordner in ein anderer Ordner und sagt Ihnen "Datei erfolgreich kopiert." wenn fertig. Das Problem ist, dass es mir einen Fehler gibt, obwohl ich FSO eingestellt:

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


Edit:

Der Fehler verschwindet, wenn ich den Code zu

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!" 
ändern

aber ich habe jetzt ein anderes Problem. Ich möchte die Sekunden berechnen, die benötigt werden, um die Dateien zu kopieren, aber jedes Mal, wenn ich den Code ausführe, heißt es 1 Sekunde.

+0

Du musst Löschen Sie das Schlüsselwort SET, Größe ist kein Objekt. –

+0

Danke für die schnelle Antwort, ich dachte, dass Sie Variablen und Strings 'setzen' müssen, obwohl die ersten 2 Zeilen nicht 'gesetzt' haben ... Stumm mich. –

+0

Verwenden Sie das Schlüsselwort SET, da 'Size' kein Objekt ist. :-) – GTAVLover

Antwort

0

Da Hans Passant bereits darauf hingewiesen wurde, dürfen Sie das Schlüsselwort Set nicht für die Zuweisung von Werten primitiver Datentypen (wie Integer) an Variablen verwenden. Das Schlüsselwort darf nur zum Zuweisen von Objekten zu Variablen verwendet werden.

Der Code aus Ihrer aktualisierten Frage meldet immer die Kopierzeit als 1 Sekunde, weil Sie zuerst sourceSize und first_pasteSize berechnen, dann kopieren Sie die Dateien und wiederholen Sie die Schleife, bis die Zielgröße der Summe der Quell- und Zielordnergröße entspricht die Kopieroperation. Dies ist nach der ersten Iteration der Schleife der Fall, weil die Aufrufe CopyFile und CopyFolder synchron sind, was bedeutet, dass sie nicht zurückkehren, bevor die Operation abgeschlossen ist. IOW Wenn Sie die Schleife betreten, ist der Kopiervorgang bereits beendet.

Wenn Sie die Zeit Kopieren der Dateien berechnet werden soll/Ordner nimmt man eigentlich calculate the time sollte:

start = Now 

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

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

Verwenden Sie die Timer Funktion, wenn Sie Millisekunde Präzision benötigen:

start = Timer 

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

duration = Timer - start 
+0

Vielen Dank !! Ich fand auch die Funktion ['Round()'] (https://www.w3schools.com/asp/func_round.asp), die Sie wie diese Runde (24.13278,2) 'verwenden können, um' 24.13' zu erhalten. –