将 ZIP 文件提取到绝对路径

Posted

技术标签:

【中文标题】将 ZIP 文件提取到绝对路径【英文标题】:Extracting ZIP file to absolute path 【发布时间】:2020-09-04 11:08:12 【问题描述】:

我正在尝试创建一个 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 文件的更好路径将不胜感激,谢谢。

【问题讨论】:

【参考方案1】:

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

objShell.NameSpace(destFolder).copyHere FilesInZip, 16

应该是这样的:

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

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

【讨论】:

我不会很快接受这个答案,以防其他人有更多他们乐于提供的关于在 EXE 文件中提取 ZIP 的最佳方法的更多信息。

以上是关于将 ZIP 文件提取到绝对路径的主要内容,如果未能解决你的问题,请参考以下文章

Dotnet Core 3.1:如何将 AddJsonFile 与文件的绝对路径一起使用?

怎么把文件保存到绝对路径

node rename绝对路径

什么是绝对路径?什么是相对路径?举个例子

vc中已知文件的绝对路径怎么获得文件名和所在文件夹啊

python定时器用法 + 获取脚本所在绝对路径 + 定义日志格式 + shell将脚本直接启动到后