如何用VBScript等待文件解压完成后再启动安装程序
替换VBScript固定等待时长为解压完成后再启动程序的方案
原脚本通过固定时长等待解压完成,无法适配不同性能的电脑。我们可以通过循环检测目标文件是否存在且稳定的方式,替换掉固定sleep语句,确保解压完成后再启动程序。
修改后的完整脚本
ZipFile="PDMsetup.zip" ExtractTo="." Set fso = CreateObject("Scripting.FileSystemObject") sourceFile = fso.GetAbsolutePathName(ZipFile) destFolder = fso.GetAbsolutePathName(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 ' 替换原固定sleep,改为循环检测目标文件直到存在且稳定 Set objFSO = CreateObject("Scripting.FileSystemObject") strPath = Wscript.ScriptFullName Set objFile = objFSO.GetFile(strPath) strFolder = objFSO.GetParentFolderName(objFile) targetExe = strFolder & "\Startwinstall.exe" ' 循环检测文件是否存在,同时验证文件大小稳定(避免解压中文件未写完) Dim fileSize, prevSize Do WScript.Sleep 1000 ' 每秒检查一次,可根据需求调整 If objFSO.FileExists(targetExe) Then prevSize = objFSO.GetFile(targetExe).Size WScript.Sleep 500 ' 等待0.5秒再次检查大小 fileSize = objFSO.GetFile(targetExe).Size If fileSize = prevSize Then Exit Do ' 大小稳定,说明解压完成 End If Loop ' 启动目标程序 Set objShell = CreateObject("Wscript.Shell") objShell.Run targetExe Set objFSO = Nothing Set objShell = Nothing
关键修改说明
- 删除原固定等待的
wscript.sleep 480000语句 - 添加循环检测逻辑:
- 每秒检查一次
Startwinstall.exe是否存在 - 当文件存在时,对比两次间隔0.5秒的文件大小,确认大小稳定(避免解压过程中文件还在写入,导致启动失败)
- 只有当文件存在且大小稳定时,才退出循环启动程序
- 每秒检查一次
- 复用原脚本中获取目标文件路径的逻辑,减少冗余代码
内容的提问来源于stack exchange,提问作者C.R. Pynch
相关产品推荐
相关产品推荐

