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