将 ZIP 文件解压到绝对路径
Extracting ZIP file to absolute path
我正在尝试创建一个 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 文件的更好路径,我们将不胜感激,谢谢。
看来我对 VBS 的缺乏经验是我在这里遇到麻烦的根源。问题最终出现在这条线上:
objShell.NameSpace(destFolder).copyHere FilesInZip, 16
必须是这样的:
objShell.NameSpace(destFolder).copyHere(FilesInZip), 16
我不确定这是否特定于特定语言版本,因为我的错误是从互联网上类似脚本的大量示例中复制的,但我真的无法找到更多有关此的详细信息(如果找到更多信息,我将编辑此答案)。
我正在尝试创建一个 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 文件的更好路径,我们将不胜感激,谢谢。
看来我对 VBS 的缺乏经验是我在这里遇到麻烦的根源。问题最终出现在这条线上:
objShell.NameSpace(destFolder).copyHere FilesInZip, 16
必须是这样的:
objShell.NameSpace(destFolder).copyHere(FilesInZip), 16
我不确定这是否特定于特定语言版本,因为我的错误是从互联网上类似脚本的大量示例中复制的,但我真的无法找到更多有关此的详细信息(如果找到更多信息,我将编辑此答案)。