如何在R中借助WinZip解压带密码的压缩文件
在R中利用WinZip自动化处理带密码的加密压缩文件(含XML)
由于你的环境仅支持WinZip,以下是基于WinZip命令行工具的可行解决方案:
前提准备
确保WinZip安装了命令行支持组件(联系IT部门获取安装权限,组织内使用WinZip通常可申请),找到命令行解压工具wzunzip.exe的路径(默认一般为C:\Program Files\WinZip\wzunzip.exe)。
具体实现代码
# 配置参数 zip_file <- "C:/your/path/encrypted_file.zip" # 目标压缩文件路径 temp_folder <- tempdir() # 使用R临时目录,自动清理无需手动删除 zip_password <- "your_secure_password" wzunzip_path <- "C:/Program Files/WinZip/wzunzip.exe" # 确认路径正确 # 构造WinZip解压命令 # -P参数后直接跟密码,路径用双引号包裹避免空格问题 unzip_cmd <- sprintf('"%s" -P"%s" "%s" "%s"', wzunzip_path, zip_password, zip_file, temp_folder) # 执行解压命令 cmd_result <- system(unzip_cmd, intern = TRUE) # 验证解压结果并读取XML if (length(cmd_result) == 0 || any(grepl("Successfully extracted", cmd_result))) { # 定位解压后的XML文件(假设压缩包内仅一个XML) xml_path <- list.files(temp_folder, pattern = "\\.xml$", full.names = TRUE)[1] # 读取XML内容 library(xml2) xml_data <- read_xml(xml_path) # 后续业务处理逻辑... } else { stop("解压失败:", paste(cmd_result, collapse = "\n")) }
注意事项
- 若密码包含空格或特殊字符,必须用双引号将密码包裹(如
-P"my pass!123") - 若
wzunzip.exe路径与默认不同,需替换为实际安装路径 - 临时目录
tempdir()会在R会话结束后自动删除,无需手动清理文件
内容的提问来源于stack exchange,提问作者Mrob
相关产品推荐
相关产品推荐

