VBS 解压缩 - 所需对象:'objshell.NameSpace(...)'
VBS unzipping - object required: 'objshell.NameSpace(...)'
我对bash或vbs知之甚少。我正在尝试制作一个脚本,它会自动解压缩一个名为 'dungeon.zip' 的 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(...)'
知道如何解决这个问题吗?
你的 ZipFile
在
Set FilesInZip=objShell.NameSpace(ZipFile).items
为空 ('undefined')。您是说 strZipFile
吗?
您应该使用 Option Explicit
来避免此类错误。
WshShell.SpecialFolders("MyDocuments")
returns 路径 没有 结尾的反斜杠。然后您将文件名附加到它。
您需要添加反斜杠。
strZipPath = strDesktop & "\" & strZipFile
strUnzipPath = strDesktop & "\" & strUnzipped
编辑以添加提示:
使用 BuildPath()
函数(它是 FileSystemObject
的一部分)再也不用担心尾随反斜杠了。
strZipPath = fso.BuildPath(strDesktop, strZipFile)
strUnzipPath = fso.BuildPath(strDesktop, strUnzipped)
设置
strZipFile = "dungeon.zip\"
和
Set FilesInZip=objShell.NameSpace(strZipFile).items
在您的代码中。
只是详细说明错误的原因。我也遇到了同样的情况,这是因为 zip 文件位置无效或不存在。尝试输入 zip 文件的确切路径,它会起作用。
我对bash或vbs知之甚少。我正在尝试制作一个脚本,它会自动解压缩一个名为 'dungeon.zip' 的 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(...)'
知道如何解决这个问题吗?
你的 ZipFile
在
Set FilesInZip=objShell.NameSpace(ZipFile).items
为空 ('undefined')。您是说 strZipFile
吗?
您应该使用 Option Explicit
来避免此类错误。
WshShell.SpecialFolders("MyDocuments")
returns 路径 没有 结尾的反斜杠。然后您将文件名附加到它。
您需要添加反斜杠。
strZipPath = strDesktop & "\" & strZipFile
strUnzipPath = strDesktop & "\" & strUnzipped
编辑以添加提示:
使用 BuildPath()
函数(它是 FileSystemObject
的一部分)再也不用担心尾随反斜杠了。
strZipPath = fso.BuildPath(strDesktop, strZipFile)
strUnzipPath = fso.BuildPath(strDesktop, strUnzipped)
设置
strZipFile = "dungeon.zip\"
和
Set FilesInZip=objShell.NameSpace(strZipFile).items
在您的代码中。
只是详细说明错误的原因。我也遇到了同样的情况,这是因为 zip 文件位置无效或不存在。尝试输入 zip 文件的确切路径,它会起作用。