在 windows 命令行中用双引号提取密码存档

Extract password archive with double quote in windows command line

我想从 PHP 中提取存档文件(zip、rar、z7、gz 等)。因为密码可以包含特殊字符,如 ¡,并且 PHP exec 不支持 unicode 字符(出于某种原因)。我按照此处 php exec() in unicode mode?.

的说明使用了一个批处理文件

但是,尽管 windows 10 很可爱,但我似乎无法弄清楚如何提取以单双引号作为密码的存档...

"C:\Program Files-Zipz.exe" x "C:\Users\me\Desktopmb.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\Desktopmb.rar
--
Path = C:\Users\me\Desktopmb.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 );

好吧,在随机测试之后,我设法找到了答案!

"C:\Program Files-Zipz.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”才能使其工作

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

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

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

并转义“<”,因为 Powershell 可以使用反引号理解这一点。