提取后删除 SFX 文件(及部分)

提取后删除 SFX 文件(及部分)

我需要创建一个 SFX 文件(太大,所以我需要制作至少 5 个部分),并且我需要在提取后立即删除 SFX 及其部分。

我在另一个主题中发现,在“模块”选项卡的“高级 SFX 选项”对话框中为 SFX 模块设置 Default64.SFX,并在“设置”选项卡中添加行:“%comspec%”/c del“%sfxname%”可用于在提取后删除唯一的 SFX 文件,但它对其部分不起作用。

有人知道如何更改此行以删除 SFX 的所有部分吗?或者还有其他方法?

答案1

可以在压缩包窗户高级 SFX 选项在标签上设置作为安装程序提取后运行Windows 命令处理器 cmd.exe引用%ComSpec%或使用%SystemRoot%\System32\cmd.exe以下参数字符串:

%ComSpec% /D /Q /E:ON /V:OFF /C for %I in ("%sfxname%") do for %J in ("%~nI") do del /A /F /Q "%~dpI%~nJ.part*.*"

C:\Temp\Development & Test(!) 100%\Program Install.part1.exe在安装有 Windows 的情况下提取存档文件后,执行以下操作C:\Windows

C:\Windows\System32\cmd.exe /D /Q /E:ON /V:OFF /C for %I in ("C:\Temp\Development & Test(!) 100%\Program Install.part1.exe") do for %J in ("%~nI") do del /A /F /Q "%~dpI%~nJ.part*.*"

Windows 命令 目录为了是 的内部命令cmd.exe

请打开命令提示符,运行cmd /?并阅读输出使用帮助。它解释了cmd选项/D/Q/E:ON、(必须是最后一个选项/V:OFF)以及最后一个选项之后的所有其他参数字符串如何由/Ccmdcmd/CWindows 命令处理器

接下来在命令提示符窗口中运行for /?并阅读输出使用帮助。

执行的完全限定文件名压缩包自解压存档被分配给环境sfxname变量压缩包SFX 模块的帮助文档中压缩包在带有标题的页面上SFX 命令:设置

首先为了命令只是将这个字符串分配给循环变量I,就像上面的例子一样C:\Temp\Development & Test(!) 100%\Program Install.part1.exe

第二为了命令仅处理引用的文件名字符串,%~nI该字符串是最后一个反斜杠(Windows 目录分隔符)和最后一个点之间的字符串,该字符串被解释为文件扩展名的开头。这是Program Install.part1上面示例的字符串。

在命令提示符窗口中运行del /?,查看命令的简短使用帮助德尔解释所使用的选项:

  • /A覆盖默认设置/A-H,匹配所有文件(不依赖于它们的属性),而不是默认忽略隐藏文件,即使设置了隐藏属性,也会删除 SFX 存档文件(不太可能);
  • /F强制删除 SFX 存档文件,即使其属性设置为只读(这也是不太可能的);
  • /Q悄悄删除文件而不提示用户确认(重要)。

两个循环变量的引用IJ修饰符的使用情况如下:

  • %~dpI引用执行的 SFX 文件名的驱动器和路径始终以反斜杠结尾,这只是示例C:\Temp\Development & Test(!) 100%\
  • %~nJ引用 SFX 主档案文件名开头的字符串Program Install.part1已经没有文件扩展名,.exe因为%~nI直到最后一个点之前的最后一个字符,这只是示例Program Install

因此对于上面的例子,提取后最终执行:

del /A /F /Q "C:\Temp\Development & Test(!) 100%\Program Install.part*.*"

该命令现在删除已执行的 SFX 存档文件Program Install.part1.exe以及文件扩展名的所有其他部分.rar

相关内容