在Windows命令行

时间:2016-11-05 12:08:23

标签: 7zip

我想从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 );

1 个答案:

答案 0 :(得分: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可以使用反引号来理解这一点。