2012-10-03 20 views
6

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

Antwort

12

Set fso = CreateObject("Scripting.FileSystemObject") 
sSourceFile = fso.GetAbsolutePathName(WScript.Arguments.Item(0)) 

Versuchen statt

sSourceFile = WScript.Arguments.Item(0) 
+0

, 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

+0

Ich vermute, dass Sie zuvor einen relativen Quellpfad verwendet haben. –