在unzip
(utils
)函数中不能指定密码。我知道的另一个函数getZip
(Hmisc
)只适用于包含一个压缩文件的zip文件。
我想在Windows 8中执行以下操作,解压foo.zip中的所有文件:
unzip("foo.zip", password = "mypass")
在unzip
(utils
)函数中不能指定密码。我知道的另一个函数getZip
(Hmisc
)只适用于包含一个压缩文件的zip文件。
我想在Windows 8中执行以下操作,解压foo.zip中的所有文件:
unzip("foo.zip", password = "mypass")
我发现这个问题非常有用,但是没有正式的答案发布,所以我来回答一下:
7z
命令。system("7z x secure.7z -pPASSWORD")
,其中包括适当的PASSWORD
。我有多个压缩文件,我不想在源代码中显示密码或将其存储在任何文本文件中,因此我编写了以下脚本:
file_list <- list.files(path = ".", pattern = ".7z", all.files = T)
pw <- readline(prompt = "Enter the password: ")
for (file in file_list) {
sys_command <- paste0("7z ", "x ", file, " -p", pw)
system(sys_command)
}
setx PATH"%PATH%;C:\Program Files\7-Zip\"
将7z添加到您的环境变量中。 - InspectorSands我发现@Kim的答案最终对我有用,但一开始并不起作用。我想我可以添加一些额外的链接/步骤,这些步骤帮助我最终实现目标。
关闭并重新打开R,以便识别环境路径
如果在执行步骤1-3时已经打开了R,您需要关闭并重新加载R,使R能够识别7z的环境路径。 @wush978对此问题的回答r system doesn't work when trying 7zip很有价值。我使用Sys.getenv("PATH")来检查是否将7zip包含在环境路径中。
第4步。我打开了R,键入了system("7z x secure.7z -pPASSWORD"),其中PASSWORD是适当的密码。
实际上我发现这个方法没有起作用,所以我按照该帖子中的说明稍微修改了一下,该帖子还解释了如何指定输出目录:https://dev59.com/s2Qo5IYBdhLWcg3wZehg#16098709。
如果您已经提取了文件,则系统命令会提示您选择是否要用存档中的文件替换现有文件,并提供选项(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit?
因此,修改后的第4步骤(Y允许替换文件)
system("7z e -ooutput_dir secure.zip -pPASSWORD" Y)
将所有内容整合成一组修改后的指令:
Sys.getenv("PATH")
来检查环境中是否识别出7zip(与@wush978在问题r system doesn't work when trying 7zip的回答相同)。system("7z e -oC:/My Documents/output_dir secure.zip -pPASSWORD")
,其中PASSWORD为实际的密码(按照此处的说明进行操作 https://dev59.com/s2Qo5IYBdhLWcg3wZehg#16098709)。以下是修改后的@Kim的精简函数版本(包括指定的输出目录和检查现有文件):
我的主要脚本
output_dir <- "C:/My Documents/output_dir " #space after directory name is important
zippedfiles_dir <- "C:/My Documents/zippedfiles_dir/"
file_list <- paste0(output_dir , zippedfiles_dir , list.files(path = zippedfiles_dir, pattern = ".zip", all.files = T))
source("unzip7z.R")
源文件unzip7z.R内的代码
pw = readline(prompt = "Enter the password: ")
for (file in file_list) {
csvfile <- gsub("\\.zip", "\\.csv", gsub(".*? ", "", file)) #csvfile name (removes output_dir from 'file' and replaces .zip extension with .csv)
#check if csvfile already exists in output_dir, and if it does, replace it with archived version and if it doesn't exist, continue to extract.
if(file.exists(csvfile)) {
sys_command = paste0("7z ", "e -o", file, " -p", pw, " Y")
} else {
sys_command = paste0("7z ", "e -o", file, " -p", pw)
}
system(sys_command)
}
password <- "your password"
system(
command = paste0("unzip -o -P ", password, " ", "yourfile.zip"),
wait = TRUE
)
password <- "your password"
read.table(
text = system(paste0("unzip -p -P ", password, " yourfile.zip ", "yourfile.csv"),
intern = "TRUE"
), stringsAsFactors = FALSE, header = TRUE, sep = ","
)
system("7z x secure.7z")
命令?参考链接:https://dev59.com/YF4c5IYBdhLWcg3wOoK6#28160425 - zx8754