Double Commander可以像处理简单文件夹一样处理压缩文件。
例如,如果我们在面板中有一个ZIP文件,我们可以简单地选择它,按Enter键,面板将显示ZIP的内容,就像我们切换到一个目录一样。
Double Commander非常灵活,可以通过自己的界面使用外部程序来处理压缩文件。它使用两种不同的原理来处理压缩文件:
当我们尝试打开一个归档文件时,Double Commander首先检查可用的打包器插件列表。
一旦进入压缩文件内部,我们可以执行一些基本功能,如查看文件、将其复制到另一个面板以及一些有限的功能。
下面的图片显示了一个示例,我们选择了压缩文件"help.rar",然后按Enter键,就像它是一个目录一样:
调用查看(F3)或编辑(F4)命令后,Double Commander会将光标下的文件提取到临时文件的系统目录中并打开它。关闭查看器后,临时文件将被删除。如果编辑器中打开的文件被更改,Double Commander将提供重新打包(如果压缩文件格式和打包器插件或外部归档工具支持此功能)。
使用双击或按Enter键时,Double Commander将显示打包文件的属性窗口:
打包器行显示使用的打包器插件名称或外部归档工具的名称。
按钮:
关闭 – 将关闭属性窗口。
解压并执行 – Double Commander会将光标下的文件提取到临时文件的系统目录中,并调用内部或系统文件关联中的默认操作。
全部解压并执行 – 与前一个类似,但首先会提取归档的全部内容。
Double Commander允许配置文件在关联程序中自动打开,使用<AutoExtractOpenMask>。
关闭时,Double Commander会删除所有临时文件。
我们可以配置Double Commander使用外部"打包器插件"文件来处理压缩归档。
从安装开始,Double Commander已经包含了一些这些.WCX插件文件。
此外,网上还有一些其他的插件。我们可以搜索.WCX插件。
还请记住,为Total Commander制作的插件基本上也可以在Double Commander中使用。
要安装、启用或配置它们,我们需要访问配置 > 选项... > 插件 > 插件WCX:
请注意,某些格式是只读的,意味着只能查看内容、解压和测试。
有时我们想要使用的归档文件类型的插件不存在。
或者出于任何原因,有时我们可能明确希望使用外部打包器来利用插件中没有的特性和功能。
Double Commander使用类似于Total Commander的MultiArc插件的工作原理来处理外部归档工具。
简而言之,使用外部归档工具可以总结为:这是一种启动我们熟悉的归档工具的方法,但由Double Commander驱动,通过向归档工具可执行文件提供各种参数,使其像集成到应用程序中一样。
本页面的其余部分将讨论这个问题:如何配置Double Commander来启动外部归档工具以执行我们需要的操作。
假设我们想使用"rar.exe"来处理.rar归档。
正如我们猜测的那样,基本的东西是我们需要配置如何调用外部归档工具来能够...
这将通过配置选项归档工具来完成,如下图所示:
所有设置都存储在multiarc.ini文件中。
在接下来的部分中,我们将看到Double Commander为我们提供的各种可能性,以正确集成外部打包器的使用。
我们不会在这里描述每个字段,因为一旦开始,就会非常直观,但我们会花时间详细描述一个集成示例。
我们将描述"rar.exe"外部归档工具的集成。没有什么比完整的逐步示例更好的了。
我们点击底部的"添加"按钮,给归档工具起一个有意义的名称,然后就可以配置它了。
然后我们需要为归档工具指定一个有意义的描述,归档工具可执行文件的确切位置,然后将与该归档工具关联的文件扩展名(不带句点)。
如果我们有多个扩展名,只需用单个逗号分隔它们,不要加空格。
注意:Double Commander支持双重扩展名(例如,"tar.gz"、"tar.xz"等),它们必须放在扩展名列表的开头(即"tar.gz"在"gz"之前)。
如前所述,我们需要配置如何调用外部归档工具可执行文件来执行我们想要的操作。
为了帮助我们做到这一点,Double Commander为我们提供了许多专用变量,用于填充我们可以配置的各种操作的配置字符串。
下表显示了可以使用的变量以及它们将被替换的内容:
命令定义 | |
---|---|
变量表达式 | 含义 |
%P | 归档工具的长名称(如"Archiver"键中所示) |
%p | 归档工具的短名称(如"Archiver"键中所示) |
%A | 归档文件的长名称 |
%a | 归档文件的短名称 |
%L | 文件列表名称。 文件列表是包含要由外部归档工具处理的文件名称的文件。 文件名是长的。 |
%l | 包含短文件名的文件列表 |
%F | 要处理的单个文件的名称。 归档工具将被执行多次,直到所有文件名都被处理完毕。 此变量应仅在目标归档工具不支持命令行上的文件列表时使用。 |
%V | 卷大小(用于多卷归档) |
%W | 密码 |
%E<errorlevel> | 可接受的最大命令错误级别。 例如, %E2 表示错误级别0、1和2都是可接受的。此变量可以在命令的任何位置指定。 如果不存在,只有错误级别0被视为成功。 |
%O<modifier> | 默认情况下,Double Commander将归档工具输出从OEM编码转换为UTF-8。 使用此选项可覆盖编码。请参见下面可能的编码修饰符。 只能与"列表"操作一起使用。 |
%R | 归档中的目标子目录 |
{} | 如果某些变量包含在大括号中 - 只有当该变量包含非空内容时才会添加 |
%S | 该变量指定可以在文件打包对话框中添加的附加命令行参数的位置 |
不用担心,我们稍后会给出示例以更好地理解。
这些修饰符可以在变量之后立即指定,无需空格。
变量修饰符 | |
---|---|
修饰符字母 | 含义 |
F | 在文件列表中仅包含文件(可与%L 和%l 变量一起使用) |
Q | 用引号括起包含空格的名称 |
q | 用引号括起所有名称 |
W | 仅使用名称,不包含路径 |
P | 仅使用路径,不包含名称 |
A | 在Windows中使用ANSI系统编码或在类Unix系统中使用默认系统编码(在GNU/Linux发行版中通常是UTF-8);可与%L 和%O 变量一起使用 |
U | 使用UTF-8编码;可与%L 和%O 变量一起使用 |
再次不用担心,我们稍后会给出示例。
如果我们希望Double Commander像处理目录一样处理压缩归档文件,我们需要能够获取归档中包含的文件列表。
此时,我们不需要解压缩!不,这只是列出其中包含的内容,以便Double Commander向我们显示内容。
在我们的"rar.exe"示例中,如果我们查看其文档,有一个"v"命令允许我们让控制台应用程序"rar.exe"输出归档中的文件列表:
因此,按照应用程序的用法,要获取归档中包含的内容列表,我们需要使用"v"命令调用"rar.exe",然后是归档名称。
让我们首先手动测试,尝试显示文件"E:\Temp\just.rar"的内容
所以我们现在需要做的是配置"列表"来告诉Double Commander如何调用"rar.exe"以获取压缩归档的内容。
为此,我们将重写刚才所做的相同内容,但使用前面提到的变量和变量修饰符。
下面是它的样子:
我们写了%P v %AQ
,使用了前面提到的变量和变量修饰符。
所以这一切都是为了用适当的参数调用外部归档工具。
当我们使用内部命令cm_OpenArchive时将使用此功能。
关于"使用不带扩展名的归档名称作为列表"选项的一些说明:此选项适用于只能包含一个文件且文件名等于不带扩展名的归档名称的归档(Bzip2、XZ等)。这类压缩文件通常不包含原始文件的名称。
到目前为止,我们所做的将使归档工具输出归档文件中的文件列表。
但这还不是全部!我们需要恢复这个输出数据并在面板中显示。
所以我们需要Double Commander解释归档工具命令将输出的这个输出表。
正如我们在之前的截图中看到的,"rar.exe"的输出内容不仅仅是原始数据。
有一些烦人的信息需要消除,只保留实际的文件列表。
幸运的是,我们可以配置一个魔法字符串,这样Double Commander会在开始解析下一行之前等待看到该字符串。
此外,我们还可以配置停止解析的魔法字符串。
由于在前后都有虚线,很容易用虚线设置这两个参数:
如果外部归档会立即输出原始数据而没有额外的行,只需将两个字段留空。
插入符号("^")表示魔法字符串必须绝对在行的开头,前面没有任何内容。否则,文本可以位于行的任何位置。
如果不可能确定它从行开始,例如如果外部归档工具在行开头显示日期和时间,然后是常量字符串,我们将把魔法字符串设置为常量字符串,但我们不会添加插入符号,这指示Double Commander该字符串可以在任何位置搜索。
如果"列表结束"字符串可能与文件名混淆,可能会过早停止处理归档内容。
这就是为什么,如果可能的话,最好指定字符串必须从行开始。
此外,如果有一种方法可以将"列表结束"字符串设置得尽可能长,同时保持常量,那就更好更安全,可以确保将来不会发生混淆。
现在Double Commander知道要解析哪些数据以获取归档文件的文件列表。
编写一个例程来解析"RAR"输出以获取文件列表会很容易。
但Double Commander不这样做。
相反,它通过给我们自己配置解析表的方式提供了极大的灵活性!
这可能比什么都不做更复杂一些,但另一方面,它给了我们最大的灵活性,使我们能够使用Double Commander开发人员甚至不知道的外部归档!
为了帮助我们解析归档工具生成的输出表,我们将有各种用字母表示的表达式。
下表给出了用于解析外部归档生成的内容列表的"标准语法"。
正如我们将从下一个示例中看到的,"标准语法"基本上基于比"高级语法"更直接的替换。
如果可能,我们将尝试使用该语法,因为它比接下来的"高级语法"解析结果更快。
标准语法解析 | |
---|---|
表达式 | 含义 |
n | 文件名 |
z | 未压缩大小 |
c | 文件描述 |
p | 压缩大小 |
d | 日 |
t | 月 |
TTT | 三字母月份名称(Jan, Feb, Mar, ...) |
y | 年 |
h | 小时 |
H | 小时修饰符字母(a – 上午时间,p – 下午时间) |
m | 分钟 |
s | 秒 |
a | 属性 |
e | 文件扩展名 |
? | 跳过一个符号 |
* | 跳过直到第一个空格或行尾 |
+ | 对于行尾的名称字段:使用直到行尾的所有字符 |
如果归档工具使用多行显示每个文件的信息,我们必须指定相应数量的行来解析内容(Double Commander支持最多50行)。
这里的关键是使用上表中的表达式来编写"列表格式"字符串,该字符串将配置Double Commander以处理外部归档,从而能够获取归档的内容,包括目录和文件名、文件大小、属性、文件日期等。
我们首先猜测的方法是在记事本等程序中写一行文本,表示我们之前手动创建的文件,然后在下面写出适合的表达式。
以下是示例:
正如我们所见,我们写了解析表达式字母,与外部归档输出的内容在归档中的位置完全匹配:
我们还需要排除行开头的4个空格,用"????"替换。
如此配置后,如果我们在面板中选择之前的"just.rar"归档,按Enter键进入其中,就像它是一个目录一样,我们会看到文件内容显示我们的做法基本上是有效的(如果我们忽略最后一个文件...):
下表给出了用于解析外部归档生成的内容列表的"高级语法"。
这种语法的元素比上表中的元素处理时间稍长。
所以只有在无法用前一种方法解决有问题的情况时才使用它们。
下一节将给出使用示例。
高级语法解析 | |
---|---|
表达式 | 含义 |
+ | 对于不在行尾的名称字段:使用直到下一个空格的所有字符 |
+ | 在任何数字字段后:使用直到第一个非数字字符的所有数字 |
n+ | 使用直到行尾的所有字符作为文件名 |
z+ | 使用直到第一个非数字字符的所有数字作为未压缩大小 |
p+ | 使用直到第一个非数字字符的所有数字作为压缩大小 |
$ | 跳过所有空格/制表符直到下一个字符或行尾 |
\ | 数据延续到下一行(最多支持2行) |
x | 正好1个空格;如果在此位置有不同字符,则忽略整行 |
z=1024 | 未压缩大小乘以给定值(这里是:1024) |
p=1024 | 压缩大小乘以给定值(这里是:1024) |
"标准语法"的示例是一个很好的猜测,但它并不完美。
有些情况下它不能正确工作。
对于大文件,文件大小比预期的更宽,所以我们第一次尝试列表会失败。
看我们的文件007 Skyfall.TS
。
我们可以看到它没有显示适当的信息。让我们比较一下:
所以我们看到文件名、文件大小、日期等信息是不正确的。
让我们使用"高级语法"的元素来解决这个有问题的情况。
以下是使其工作的方法,即使输出字段不总是*完全*相同的宽度:
这有点复杂,但很容易描述,最终我们会看到生成它并不那么复杂。
下面是彩色描述,帮助我们可视化每个小块的解析:
所以使用这个"列表格式"字符串,我们现在可以再次测试,得到正确的结果,即使是大文件:
使用前面提到的变量和变量修饰符,这是配置如何调用外部归档工具来"解压"选定归档中的文件或所有文件的行。
继续我们的"rar.exe"示例,从其文档中我们知道使用"e"命令表示我们想要解压文件或一组文件。
使用"rar.exe",我们还可以在参数中提供要解压的文件列表。
因此,我们将利用Double Commander提供给我们的%L
变量,该变量将创建一个文本文件,其中包含从活动面板中选择的每个要解压的文件,并将这个单一的列表文件作为参数传递。
以下是我们用"rar.exe"配置解压的行:
此示例的描述是:
当我们选择归档来解压整个内容、单个文件等时,将调用此命令。
我们可能没有意识到,但当我们"进入"归档就像它是一个目录一样,我们按F3查看归档中文件的内容时,这个"解压"操作将在后台进行。选定的文件将使用该模式提取到临时文件的系统目录中,然后我们将使用F3调用的查看器查看该临时文件。
当我们使用内部命令cm_ExtractFiles时将使用此功能。
使用前面提到的变量和变量修饰符,这是配置如何调用外部归档工具来"打包"文件或将所有文件添加到选定归档的行。
继续我们的"rar.exe"示例,从其文档中我们知道使用"a"命令表示我们想要创建归档或将文件或一组文件添加到现有归档。
使用"rar.exe",我们还可以在参数中提供要添加的文件列表。
因此,我们将利用Double Commander提供给我们的%L
变量,该变量将创建一个文本文件,其中包含从活动面板中选择的每个要添加到归档的文件,并将这个单一的列表文件作为参数传递。
以下是我们用"rar.exe"配置归档创建或添加的行:
此示例的描述是:
当我们选择一个或一组文件并请求使用"RAR"外部归档工具打包它们时,将调用此命令。
当我们使用内部命令cm_PackFiles时将使用此功能。
某些类型的压缩文件格式支持直接删除压缩文件内部文件的可能性。
如果支持此功能,我们可以配置Double Commander以指示如何调用外部归档工具来执行此操作。
使用此命令的典型情况是当我们进入归档,在其中选择一个文件并点击删除它时。
如果配置了此"删除操作",则将用于该操作。
请注意,此操作在外部归档配置的第二个选项卡上。
继续我们的"rar.exe"示例,以下是配置此操作的方法:
此示例的描述是:
一些归档工具允许验证归档文件的完整性,以确保其中没有错误,确保没有损坏。
如果支持此功能,我们可以配置Double Commander以指示如何调用外部归档工具来执行此操作。
继续我们的"rar.exe"示例,以下是配置此操作的方法:
此示例的描述是:
当我们使用内部命令cm_TestArchive时将使用此功能。
如果没有错误,测试窗口将关闭。如果有错误,将出现如下消息:
默认情况下,当我们调用内部命令cm_ExtractFiles来解压归档时,如果其中的文件按特定目录结构排列,归档工具将在解压文件时重新创建相同的结构。
但是,当归档工具支持时,有时解压所有文件到同一位置而不重新创建目录结构是合适的。
这就是配置"无路径解压"操作时使用的地方。
例如使用"rar.exe",执行此操作的命令将写成如下形式:
此示例的描述是:
当我们请求解压归档时,这种效果将在请求者中可见:
一些归档工具可以创建"自解压"压缩文件。
这意味着在处理结束时,我们将得到一个可执行文件,当它被执行时,将解压其中包含的内容。
当我们希望确保需要压缩文件内容的人在解压缩时不会遇到问题时,这是很有用的:不需要安装任何东西,只需执行文件,我们就会得到未压缩的文件!
通常,此操作的配置方式与"添加操作"类似,我们只需添加一个参数,表示我们希望最终结果是自解压的。
这就是例如我们的"rar.exe"示例的情况。以下是配置此操作的方法:
此示例的描述是:
要创建自解压文件,请注意过程与通常创建压缩文件时相同,就像使用内部命令cm_PackFiles一样,但在出现的请求者中,我们将选中"创建自解压归档"选项。
我们可以配置Double Commander,使其忽略文件的扩展名,而尝试通过其内部内容检测压缩归档文件,然后调用上面描述的适当列表和解包命令。
这就是我们将使用内部命令cm_OpenArchive的地方。
此功能的示例是当我们想要查看自解压.exe文件的实际内容而不必启动它时。
另一个示例是查看以不同文件扩展名保存的归档,如Microsoft Word的.docx文件,实际上是一个压缩的ZIP文件。
基本上,我们可以配置Double Commander以检测选定文件中特定位置的战略性数据模式,以便识别配置的归档。
我们将称这些模式为"ID",本节是关于配置它们的。
我们有三个设置:ID、ID位置和ID搜索范围。
我们将指示Double Commander在哪里搜索特定的ID模式以识别归档类型,然后使用与识别的归档类型相关的配置命令。
让我们从一个简单的示例开始。以下是7-Zip归档开头的快照:
通过查看其他7-Zip文件,我们看到前六个字节总是序列0x37 0x7A 0xBC 0xAF 0x27 0x1C。
因此,我们将利用这一点,配置Double Commander,当它看到以该序列开头的文件时,假设该文件是7-Zip归档。
这就是我们使用以下配置所做的:
我们必须将ID写成用空格分隔的2位十六进制数。
ID位置(可选)是归档中ID的位置。如果不存在,ID将在归档开头搜索。我们可以用"-"符号定义位置:在这种情况下,位置将从文件末尾计算。特殊值<SeekID>确定搜索ID(如果未按ID位置的数值找到)。在范围"0 .. 文件大小"或"0 .. ID搜索范围"中搜索。值可以写成十进制(12345)或十六进制(0x3039)。对于负值,使用符号0xFFFFFFFF(-1)。
ID搜索范围(可选)是定义<SeekID>时搜索ID的字节数。默认为1 MB。
注意:以上所有参数都可以定义多个值。我们可以使用逗号分隔这些多个值。
在我们的7-Zip归档示例中,ID和ID位置(0,因为在文件开头)就足够了。
因此,当我们调用内部命令cm_OpenArchive时,Double Commander将扫描文件内容,如果在文件偏移量0处识别到"0x37 0x7A 0xBC 0xAF 0x27 0x1C"模式,它将将其处理为我们配置的7Z类型的文件,然后使用与识别的归档类型相关的配置命令和参数进行列表、解压等操作。
在大多数情况下,不需要以十六进制表示检查文件:文件签名可以在格式规范中找到或使用现有的列表、数据库或实用程序(例如,此维基百科页面或FreeDesktop.org MIME数据库)。
上述步骤通常足以使用外部归档工具,但以防万一我们还有几个选项:
显示控制台输出 – 如果启用,Double Commander将(逐行)将外部归档工具和解析器的工作结果写入日志窗口。
调试模式 – 类似于前一个选项,但工作结果也将输出到Double Commander的调试消息中(请参见--debug-log的描述)。在这种情况下,包含文件列表的临时文件(我们示例中的%L
)在操作完成后不会自动删除。
如果在设置中禁用了日志窗口的显示,它将被强制显示并在Double Commander关闭时隐藏。消息不会保存到日志文件中。
此菜单包含几个附加功能:
自动配置 – Double Commander将检查所有归档工具的可执行文件:如果找到文件,程序将自动添加其完整路径并启用归档工具,否则将禁用归档工具。
放弃修改 – 重置所有未保存的设置更改。
排序归档工具 – 按字母顺序对归档工具列表进行排序。
全部禁用和全部启用 – 启用或禁用所有归档工具。
导出...和导入... – 允许我们导出和导入归档工具设置(所有归档工具或其中的一部分)。
默认情况下,扩展名在WCX插件和外部归档工具设置中指定的文件作为文件夹打开。要在一个关联的应用程序中打开它们,我们可以使用文件的上下文菜单中的"打开"项(但在这种情况下只使用系统文件关联)或我们可以将所需的操作添加到"操作"菜单中。
要使用Enter键或双击,我们必须更改设置。
我们可以只是从设置中删除扩展名,但在这种情况下命令cm_OpenArchive和cm_ExtractFiles将变得不可用。另一种方法:
如果使用WCX插件,则可以打开插件设置,选择扩展名并启用"显示为普通文件(隐藏打包器图标)"标志。
如果使用外部归档工具来解包文件,则可以填写使用ID的字段而不指定文件扩展名。
对于此类文件,Double Commander将使用关联的图标而不是通用的归档图标。