Ich arbeite an einem Skript, das die eingebauten Funktionen von Windows verwenden wird, um eine mitgelieferte ZIP-Datei zu entpacken. Ich bin zu vbscript ziemlich neu, also stopft mich einige der Syntax ein wenig. Ich arbeite mit einigen vorhandenen Code und versuche, es zu ändern, so dass es eine Befehlszeilenoption für den Dateinamen benötigt. Wenn ich die Befehlszeilen verwenden, um die Dateinamen übergeben, ich die Fehlermeldung:Befehlszeilenargumente - Objekt erforderlich: 'objshell.NameSpace (...)'
object required: 'objshell.NameSpace(...)'
Wenn ich die gleiche Variable mit Text im Skript zu füllen, wird das Skript fehlerfrei. Gibt es ein anderes Stück, das ich vermisse, wenn ich versuche, Befehlsargumente zu verwenden?
Hier ist mein Code:
Option Explicit
Dim sDestinationDirectory,sLogDestination,fso,outLog,sJunk,sSourceFile
sDestinationDirectory = "C:\scripts\vbscriptTemplates\unzip"
sLogDestination = "C:\scripts\vbscriptTemplates\"
Set fso=CreateObject("Scripting.FileSystemObject")
Set outLog = fso.OpenTextFile("unzipRIP.log", 2, True)
If WScript.Arguments.Count = 1 Then
sSourceFile = WScript.Arguments.Item(0) 'Using this line the code will fail.
'sSourceFile = "C:\scripts\vbscriptTemplates\test.zip" 'Using this line the code will run.
outLog.WriteLine ".:|Processing new zip file|:."
outLog.WriteLine "Processing file: " & sSourceFile
Extract sSourceFile,sDestinationDirectory
Else
sJunk = MsgBox("File to be processed could not be found. Please verify.",0,"Unzip - File not found")
outLog.WriteLine "File to be processed could not be found. Please verify."
outLog.Close
Wscript.Quit
End If
Sub Extract(ByVal myZipFile, ByVal myTargetDir)
Dim intOptions, objShell, objSource, objTarget
outLog.WriteLine "Processing file in subroutine: " & myZipFile & " target " & myTargetDir
' Create the required Shell objects
Set objShell = CreateObject("Shell.Application")
' Create a reference to the files and folders in the ZIP file
Set objSource = objShell.NameSpace(myZipFile).Items()
' Create a reference to the target folder
Set objTarget = objShell.NameSpace(myTargetDir)
intOptions = 4
' UnZIP the files
objTarget.CopyHere objSource, intOptions
' Release the objects
Set objSource = Nothing
Set objTarget = Nothing
Set objShell = Nothing
End Sub
Die Linie verwiesen ist
sSourceFile = WScript.Arguments.Item(0)
Das ist mein Versuch, eine Variation auf dem Code geschrieben von Rob van der Woude zu machen. http://www.robvanderwoude.com/vbstech_files_zip.php#CopyHereUNZIP
, das wie ein Weltmeister arbeitete. Also kann ich besser verstehen, warum funktioniert der absolute Pfad der Datei in diesem Fall besser als das, was ich vorher benutzt habe? Ich nehme an, dass ich vorher einen relativen Pfad verwendet habe? Oder hat mein Skript versucht, die Datei in einem anderen Verzeichnis zu suchen, ohne es zu wissen? Vielen Dank für die Unterstützung! – gritts
Ich vermute, dass Sie zuvor einen relativen Quellpfad verwendet haben. –