2016-11-05 35 views
0

我想从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提取。 (下面的注释) 我有一个文件存储在test.rar存储在25mb.rar与密码“(单一双引号)25mb.bin

的错误是:

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"\"" * 

*:钍e行询问我是否要覆盖,这意味着-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

好了,测试随意的事情后,我好不容易找到answear!

"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”才能使其工作

相关问题