在Windows命令行中用双引号提取密码保护的存档文件

4

我想从PHP中提取归档文件(zip,rar,z7,gz等),因为密码可能包含特殊字符如 ¡¿,而PHP exec不支持Unicode字符(出于某种原因)。最终我使用了一个批处理文件,如此处所述 php exec() in unicode mode?

但是,尽管Windows 10很美好,但我似乎无法弄清楚如何提取具有单个双引号作为密码的存档文件...

"C:\Program Files\7-Zip\7z.exe" x "C:\Users\me\Desktop\25mb.rar" -o"C:\Users\me\Desktop\" -p"password here" -y

这是使用7zip提取默认行的命令。 (请看下面的注意) 我的文件25mb.bin存储在带有密码"(单引号)的test.rar中,该文件又存储在25mb.rar中。

错误信息为:

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21

Scanning the drive for archives:
1 file, 13312 bytes (13 KiB)

Extracting archive: C:\Users\me\Desktop\25mb.rar
--
Path = C:\Users\me\Desktop\25mb.rar
Type = Rar
Physical Size = 13312
Solid = -
Blocks = 1
Multivolume = -
Volumes = 1

ERROR: Data Error in encrypted file. Wrong password? : test.rar

Sub items Errors: 1

Archives with Errors: 1

Sub items Errors: 1

我尝试过:

-p" *
-p"" **
-p"""  *
-p"""" **
-p"^"" * (default escape for CMD)
-p"\"" *

*: 这一行问我是否要覆盖,这意味着-y没有被执行,而是被视为密码的一部分。

**: 执行时出现错误。提取的文件test.rar无法打开(已损坏)。

注意:此方法在处理~`!@#$%^& ()_+- = {} [] | :;'<>? / €¡¿* 等字符时没有任何问题。

注意:WinRAR具有一个很棒的功能,您可以提供一个包含密码的文件来解压缩,而不是提供字符串。但是,这仅适用于RAR文件(!),因此在我的情况下是无用的。

使用rar的示例:

file_put_contents( 'C:\Users\bunny\Desktop\pass.txt', $password );
exec( '"C:\\Program Files\\WinRAR\\winrar" e -ad -p "C:\\Users\\me\\Desktop\\25mb.rar" *.* "C:\\Users\\me\\Desktop\" < "C:\\Usersme\\Desktop\\pass.txt"', $extractStatus );
2个回答

4

好的,在测试了很多东西之后,我成功找到了答案!

"C:\Program Files\7-Zip\7z.exe" x "C:\Users\me\Desktop\dq.rar" -o"C:\Users\me\Desktop\" -sccutf-8 -y < C:\Users\me\Desktop\pass.txt

请注意,-p参数不存在(如果添加了该参数,它将无法正常工作)。
文件pass.txt包含“\r\n”(双引号后跟一个换行符)。
使用“-sccutf-8”选项可以确保特殊字符正常工作!
它有效!
编辑2:当密码文件包含特殊字符如°、¡、¿或§时,此方法仍然适用!您必须设置“-sccutf-8”才能使其正常工作。

1

是的,这个答案对我帮助很大。我在我的Win10笔记本上的Powershell脚本中使用了它:

(首先用户将密码放入$input_txt)

$input_txt | Out-File ".\pw.txt" -Encoding default
cmd /c ".\7za.exe" e ".\myfile.zip" -o".\" -sccWIN -y `< ".\pw.txt"

并用反引号转义“<”,因为Powershell可以理解它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接