如何用PowerShell解压%TEMP%目录的压缩包并访问内部exe文件
PowerShell 解压临时目录压缩包并运行内部EXE实现方案
前置说明
Windows 10 1709 及以上版本、PowerShell 5.1 及更高版本自带原生解压 cmdlet Expand-Archive,无需引入第三方工具即可直接使用。如果运行环境版本更低,可替换为下文给出的兼容版解压逻辑。
完整实现步骤
- 第一步:定义基础变量,替换为你实际的压缩包名称、EXE 对应路径
# $env:TEMP 对应系统 %TEMP% 环境变量,拼接为压缩包完整路径 $zipPath = Join-Path $env:TEMP "你的压缩包名称.zip" # 自定义解压目标路径,示例为在TEMP目录下新建专属解压文件夹 $extractPath = Join-Path $env:TEMP "CustomExtractDir" # 如果你已知压缩包内EXE的相对路径,可提前定义完整路径 $exeRelativePath = "子目录名\目标程序.exe" $exeFullPath = Join-Path $extractPath $exeRelativePath
- 第二步:执行解压操作
# 解压目标目录不存在则自动创建 if (-not (Test-Path $extractPath)) { New-Item -ItemType Directory -Path $extractPath | Out-Null } # 执行解压,-Force 参数会自动覆盖已存在的同名文件,不需要可删除 Expand-Archive -Path $zipPath -DestinationPath $extractPath -Force
- 第三步:定位并运行EXE
如果你明确知道EXE在压缩包内的相对路径,直接调用即可:
# 校验EXE文件是否存在 if (Test-Path $exeFullPath) { # 运行EXE,需要传启动参数可加 -ArgumentList "参数1","参数2" # -Wait 参数会等待EXE运行结束再执行后续脚本,不需要可删除 Start-Process -FilePath $exeFullPath -Wait } else { Write-Error "未找到目标可执行文件:$exeFullPath" }
如果你不清楚压缩包内EXE的具体路径,可使用搜索逻辑自动匹配:
# 递归搜索解压目录下所有EXE文件,取第一个匹配结果,可修改Filter过滤 $foundExe = Get-ChildItem -Path $extractPath -Filter "*.exe" -Recurse | Select-Object -First 1 -ExpandProperty FullName if ($foundExe) { Start-Process -FilePath $foundExe -Wait } else { Write-Error "解压目录下未找到任何EXE可执行文件" }
低版本系统兼容方案
如果运行环境不支持Expand-Archive,可替换解压逻辑为调用系统原生COM对象实现,兼容Windows 7及以上系统:
$shell = New-Object -ComObject Shell.Application $zipFile = $shell.NameSpace((Resolve-Path $zipPath).Path) $destination = $shell.NameSpace((Resolve-Path $extractPath).Path) # 第二个参数16代表解压时自动覆盖已有文件 $destination.CopyHere($zipFile.Items(), 16)
内容的提问来源于stack exchange,提问作者user_stack
相关产品推荐
相关产品推荐

