解压缩VBS - 需要对象:'objshell.NameSpace(...)'

时间:2015-07-04 15:25:12

标签: vbscript cmd zip unzip

我对bash或vbs知之甚少。我正在尝试制作一个脚本,它会自动解压缩一个名为'dungeon.zip'的拉链,其中包含一个我编程的小游戏。我想将它解压缩到一个名为dungeon的文件夹,该文件夹位于zip文件所在的目录中。我使用this answer中的代码,并将文件替换为我的文件:

strZipFile  = "dungeon.zip"
strUnzipped = "dungeon\"

Sub UnZip(ExtractTo,ZipFile)

Set fso = CreateObject("Scripting.FileSystemObject") 
    If NOT fso.FolderExists(ExtractTo) Then 
       fso.CreateFolder(ExtractTo) 
End If 

Set objShell = CreateObject("Shell.Application") 
Set FilesInZip=objShell.NameSpace(ZipFile).items 

ObjShell.NameSpace(ExtractTo).CopyHere(FilesInZip) 
Set fso = Nothing 
Set objShell = Nothing 
End Sub

set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("MyDocuments")

strZipPath   = strDesktop & strZipFile
strUnzipPath = strDesktop & strUnzipped

UnZip strUnzipPath , strZipPath

在他的回答中,我从cmd文件中运行.vbs:

cscript UnzipZip.vbs

这是错误:

C:\Users\Brett\Downloads\UnzipZip.vbs(12, 1) Microsoft VBScript runtime error: Object required: 'objShell.NameSpace(...)'

有关如何解决这个问题的想法吗?

4 个答案:

答案 0 :(得分:3)

WshShell.SpecialFolders("MyDocuments")返回路径,不带一个尾部反斜杠。然后,您将文件名附加到它。

您需要添加反斜杠。

strZipPath   = strDesktop & "\" & strZipFile
strUnzipPath = strDesktop & "\" & strUnzipped

修改以添加提示:

使用BuildPath()函数(它是FileSystemObject的一部分)永远不必担心会再次使用反斜杠。

strZipPath   = fso.BuildPath(strDesktop, strZipFile)
strUnzipPath = fso.BuildPath(strDesktop, strUnzipped)

答案 1 :(得分:1)

您的ZipFile

Set FilesInZip=objShell.NameSpace(ZipFile).items 

为空('undefined')。您的意思是strZipFile吗?

您应该使用Option Explicit来避免此类错误。

答案 2 :(得分:1)

   strZipFile  = "dungeon.zip\" 

   Set FilesInZip=objShell.NameSpace(strZipFile).items

代码。

答案 3 :(得分:0)

为了详细说明错误的原因,我也遇到了这个问题,因为zip文件位置无效或无法找到。尝试输入zip文件的确切路径,它将起作用。