0

我正在尝试创建一个 VBS 文件,该文件可以将 ZIP 文件的内容从相对路径提取到绝对文件路径目标。我试图创建这个 VBS 文件的原因是因为我的总体目标是通过 iExpress 创建一个 EXE 文件,它将一堆代码复制到用户的计算机并同时安装 nodeJS。

我对采用这种方法的想法是创建一个批处理脚本,将代码目录复制到用户计算机上的设定位置,然后执行一个 MSI 文件来安装 nodeJS。我已经能够得到一个可以做到这一点的批处理脚本,但现在我想把它全部打包成一个 EXE。为此,我认为我需要将代码目录放入 ZIP 文件中,以便将其添加到 EXE 文件中,然后我的 EXE 需要一些功能来提取它。

要添加此功能,我的研究似乎表明 VBS 是最好的选择(特别是考虑到我希望还可以补偿对 PowerShell cmdlet 的访问受限的用户)。搜索似乎表明这种类型的文件是为了我想做的事情。

ZipFile="test.zip"
ExtractTo="C:\test-install\test"
 
Set fso = CreateObject("Scripting.FileSystemObject")
sourceFile = fso.GetAbsolutePathName(ZipFile)
destFolder = fso.GetFolder(ExtractTo)
 
Set objShell = CreateObject("Shell.Application")
Set FilesInZip=objShell.NameSpace(sourceFile).Items()
objShell.NameSpace(destFolder).copyHere FilesInZip, 16
 
Set fso = Nothing
Set objShell = Nothing
Set FilesInZip = Nothing

尽管在这条线上这似乎不起作用......

objShell.NameSpace(destFolder).copyHere FilesInZip, 16

...它向我抱怨 destFolder 需要成为一个对象。我不太确定要更改什么来修复此错误(我对 VBS 不太熟悉),互联网上的大多数示例最初将 ExtractTo 变量设置为相对文件路径并运行命令将其转换为绝对文件路径。我不想这样做,因为当 iExpress 将其全部转换为 EXE 时,我的理解是相对文件路径从某个随机 TEMP 文件夹中开始。

任何关于我的 VBS 文件中的错误的指导,或指示提取 ZIP 文件的更好路径将不胜感激,谢谢。

4

1 回答 1

0

看来我对 VBS 的缺乏经验是我在这里遇到麻烦的根源。问题最终出在这条线上:

objShell.NameSpace(destFolder).copyHere FilesInZip, 16

它必须是这样的:

objShell.NameSpace(destFolder).copyHere(FilesInZip), 16

我不确定这是否特定于该语言的某个版本,因为我的错误是从互联网上类似脚本的大量示例中复制的,但我真的无法找到更多详细信息(我如果发现更多,将编辑此答案)。

于 2020-09-04T23:33:39.333 回答