Double Commander

2.12. 参数中的变量

内容

1. 快速介绍
2. 基本参数变量
3. 基本后缀变量
4. 编号后缀
5. 为每个文件指定前缀和后缀
6. 面板路径
7. 结果是否带引号
8. 路径结尾是否有分隔符
9. 文件列表
10. 文件列表的后缀
11. 文件列表后缀的组合
12. 在终端中执行
13. 交互
14. 其他变量
15. 所有变量的汇总表
16. 环境变量

1. 快速介绍

变量将在配置工具栏按钮或设置文件关联操作和热键操作时帮助我们。

当我们需要根据当前选中的文件、所在的目录以及其他与面板中显示内容相关的上下文信息为命令提供参数时,基本上会使用这些变量。

这里有一个简单的例子。用户配置了一个按钮来启动IrfanView,并使用变量%p作为参数。

变量示例

当用户点击该按钮时,它将启动IrfanView,并将变量%p替换为活动面板中当前选中的文件。

这就是本页面描述的变量的含义。

正如您将看到的,大多数变量都以百分号%开头。

注意:变量和后缀是区分大小写的!

2. 基本参数变量

这些是可以使用的基本变量,与当前选择相关。

默认情况下,包含空格和/或特殊字符的变量值会自动转义:在Windows中值会被双引号包围,或在类Unix系统中特殊字符前会加上"\"。如果您需要不带引号的结果,请参见结果是否带引号部分。

对于每个变量,示例假设我们指向文件C:\Users\UserName\Desktop\comment.png。

基本变量
变量含义
%p
完整文件名,路径+文件名
示例: %p = "C:\Users\UserName\Desktop\comment.png"
%f
仅文件名,包括扩展名
示例: %f = "comment.png"
%d
仅路径,不包括结尾的目录分隔符
示例: %d = "C:\Users\UserName\Desktop"
%z
路径中最后一个目录的名称
示例: %z = "Desktop"
%o
仅文件名,不包括扩展名
示例: %o = "comment"
%e
仅扩展名,不包括点号
示例: %e = "png"
%v
相对于当前活动目录的文件名
例如当我们调用内部命令cm_FlatView时适用。
如果从目录"C:\Users\UserName"进行平面视图,%v将结果为"Desktop\comment.png"

%a变量可用于虚拟文件系统(打开的存档或文件系统插件):字符串包括虚拟文件系统的路径(存档的完整名称或带有"wfx://"的WFX插件名称)和相对于虚拟文件系统根目录的完整文件名。

如果选择了多个文件,这些变量将返回一行中所有选中文件的值。要始终获取光标下文件的值,我们可以使用编号后缀0

3. 基本后缀变量

在上述变量字母之后,我们可以添加另一个字母到前一个字母中,以更精确地指定我们想要使用的内容。

对于每个变量,示例假设:
左侧面板指向文件"C:\LeftFolder\File.lft"
右侧面板指向"C:\RightFolder\File.rgh"
当前活动面板是右侧面板。

基本后缀
后缀含义
s
源或活动面板(无论在左侧还是右侧)
示例: %ps = "C:\RightFolder\File.rgh"
t
目标或非活动面板(无论在左侧还是右侧)
示例: %pt = "C:\LeftFolder\File.lft"
l
左侧面板
示例: %pl = "C:\LeftFolder\File.lft"
r
右侧面板
示例: %pr = "C:\RightFolder\File.rgh"
p
两个面板,活动面板在前,然后是一个空格,接着是非活动面板
示例: %pp = "C:\RightFolder\File.rgh" "C:\LeftFolder\File.lft"
b
两个面板,左侧面板在前,然后是一个空格,接着是右侧面板
示例: %pb = "C:\LeftFolder\File.lft" "C:\RightFolder\File.rgh"

4. 编号后缀

如果我们当前选择了多个文件,可以在前面提到的后缀基础上添加编号后缀,以精确指定要使用哪个文件。

对于表中的每个元素,我们假设源面板指向"C:\temp\",并且我们选择了二十个文件,从"FileA.txt"、"FileB.txt"等一直到"FileZ.txt"。

编号后缀
后缀含义
0
光标下的文件
示例: %ps0 = "C:\temp\FileY.txt"
1
第一个选中的文件
示例: %ps1 = "C:\temp\FileA.txt"
2
第二个选中的文件
示例: %ps2 = "C:\temp\FileB.txt"
3
第三个选中的文件
示例: %ps3 = "C:\temp\FileC.txt"
21
第二十一个选中的文件
示例: %ps21 = "C:\temp\FileU.txt"

5. 为每个文件指定前缀和后缀

有时当我们向可执行文件传递参数时,需要在文件名前包含某些内容。

有时我们希望在文件名前后都包含某些内容。

请注意,以下内容将应用于每个选中的项目。

对于表中的每个元素,我们假设当前在"C:\Windows\Fonts"中选择了三个文件,分别是"courrier.ttf"、"fixedsys.ttf"和"terminal.ttf"。

前缀和后缀
前缀和后缀含义
{}
一对大括号将导致在每个选中项目前添加大括号之间的文本
示例: %fs{+} = "+courrier.ttf" "+fixedsys.ttf" "+terminal.ttf"
{}{}
两对大括号将导致在每个选中项目前后分别放置大括号之间的文本。
示例: %fs{[}{]} = "[courrier.ttf]" "[fixedsys.ttf]" "[terminal.ttf]"

6. 面板路径

之前我们已经指出了与面板内当前选中项目相关的变量。

但我们也可以使用变量%D来表示我们要引用面板的目录名。

对于该变量,我们可以添加与上述相同的后缀字母,以精确指定我们要引用哪个面板。

对于每个变量,示例假设:
左侧面板在"C:\Reference"
右侧面板指向"E:\Work"
当前活动面板是右侧面板。

面板路径
变量含义
%D
单独使用,无后缀,将返回当前活动面板的路径
示例: "E:\Work"
%Ds
当前活动或源面板的目录(无论在左侧还是右侧)
示例: "E:\Work"
%Dt
非活动或目标面板的目录(无论在左侧还是右侧)
示例: "C:\Reference"
%Dl
左侧面板的目录
示例: "C:\Reference"
%Dr
右侧面板的目录
示例: "E:\Work"
%Z
单独使用,无后缀,将返回当前活动面板路径的最后一个目录名
示例: "Work"
%Zs
当前活动面板路径的最后一个目录名(无论在左侧还是右侧)
示例: "Work"
%Zt
非活动面板路径的最后一个目录名(无论在左侧还是右侧)
示例: "Reference"
%Zl
左侧面板路径的最后一个目录名
示例: "Reference"
%Zr
右侧面板路径的最后一个目录名
示例: "Work"

%A变量可用于虚拟文件系统(打开的存档或文件系统插件):存档的完整名称或带有"wfx://"的WFX插件名称。

7. 结果是否带引号

如您之前所见,由于历史和传统原因,DC将返回带引号的结果。

最初当文件名中有空格并且我们想将文件名作为参数传递并希望整个过程正常工作时,这是很有用的。

但是随着新变量的添加,很明显我们需要一种方法来获得不带引号的结果。一个基本的例子是当我们想要连接一个源文件名,但只是没有扩展名的文件名,然后加上我们自己指定的新扩展名。

因此,不是添加新的变量来返回相同但不带引号的内容,我们仍然可以使用相同的变量表示相同的含义,但只需在参数行上预先设置类似%"0的内容,以指示DC从现在开始,在评估行的结尾,不要对结果加引号。

基本上我们会有:

%"0 : 从这个位置开始,生成的文件名将不带引号
%"1 : 从这个位置开始,生成的文件名将带引号
%"  : 也接受,恢复默认值,即结果带引号

下表给出了一个示例,我们选中了一个名为"Client List.mdb"的文件,以及带引号/不带引号字符串的各种组合结果。

带引号与否的示例
表达式结果
%o.zip
"Client List".zip
%"0%o.zip
Client List.zip
%"0"%o.zip"
"Client List.zip"
%"0"%o.zip" %"1%f
"Client List.zip" "Client List.mdb"

8. 路径结尾是否有分隔符

如您之前所见,由于历史和传统原因,当DC返回路径时,它将不带结尾路径分隔符。

这可以通过使用一个变量来改变,该变量将确定以下行中的路径变量是否带结尾路径分隔符。

基本上我们有:

%/0 : 返回的路径将不带结尾分隔符
%/1 : 返回的路径将带结尾分隔符
%/  : 也接受,默认情况下,返回的路径将不带结尾分隔符

下表给出了一个示例,我们选择了目录"C:\Users\UserName\Desktop",以及结尾路径变量的各种组合结果:

结尾路径变量示例
表达式结果
%D
"C:\Users\UserName\Desktop"
%/0%D
"C:\Users\UserName\Desktop"
%/1%D
"C:\Users\UserName\Desktop\"
%/%D
"C:\Users\UserName\Desktop"

当我们从多个变量组合名称时,这个变量会很有用。例如,在Windows中,%Dt\%f0(手动添加目录分隔符)而不是%/1%Dt%f0在目录内会正常工作,但如果在非活动面板中打开驱动器根目录,Double Commander将返回驱动器字母后有两个目录分隔符的不正确路径。

9. 文件列表

一些应用程序将接受单个文件名作为参数,并假定该文件是包含文件名列表的文本文件。

Double Commander提供了变量,这些变量将在临时文件目录中创建一个临时文本文件,其中包含所有指定选中项目的列表,并将临时创建文件的文件名替换为变量。

文件列表变量
表达式描述
%L
选中项目的完整文件名列表(路径+文件名)的文件名
%F
选中项目的仅文件名列表的文件名
%R
选中项目的仅相对路径名列表的文件名

Double Commander将在Windows中使用ANSI系统编码,或在类Unix系统中使用默认系统编码(在GNU/Linux发行版中通常是UTF-8)。

关闭时,Double Commander会删除所有此类临时文件。

10. 文件列表的后缀

默认情况下,文件列表中的上述文件名是不带引号的。但如果需要,您可以添加一个后缀来改变这一点。

此外,还有后缀可以指定是否希望此文件列表以UT8或UTF16编码。

文件列表变量的后缀
表达式描述
Q
列表中的文件名将带引号
U
列表将以UTF8格式编码
W
列表将以UTF16格式编码

11. 文件列表后缀的组合

您还可以添加另一个后缀,使用前面提到的相同后缀字母来指定需要哪个面板的文件列表。

以下是可能的示例:

文件列表变量后缀的组合
表达式描述
%LQt
完整文件名,带引号,来自目标面板的选中文件
%FUs
仅文件名,UTF8格式,来自源面板的选中文件
%RQW
相对路径的文件名,带引号,UTF16格式,来自源面板(默认)的文件

12. 在终端中执行

您可以在参数中指定是否要将配置的命令行在终端中执行。

为此,您将使用%t变量。

在终端中执行
表达式描述
%t0
在终端中运行并在结束时请求关闭
%t1
在终端中运行并在结束时保持打开

13. 交互

以下是两个有用的变量,用于显示消息并在运行时提示用户提供参数,带有建议的默认值:

交互
表达式描述
%[message to show]
将显示括号之间指定文本的消息框
%[message;default_val]
将提示用户输入值,并提供默认值

交互示例:

交互示例
表达式描述
%[Make sure ThisFile.ext is closed!]
将在执行操作前显示消息"Make sure ThisFile.ext is closed!"。
%[Enter WIDTH value for image conversion;1024]
将提示用户输入值,显示文本"Enter WIDTH value for image conversion",默认建议值为1024,但用户可以输入其他值。用户输入的内容将替换命令行中"%[query;default]"表达式所在位置的内容。

14. 其他变量

在最后一节中,我们展示了尚未介绍的变量。

其他变量
表达式描述
%%
将简单地替换为单个%符号
%#
从这个位置开始,#符号将被视为%
#%
从前述状态开始,将使%被视为变量前缀
%?
将显示即将执行的命令行。

%%的用途是当我们需要在参数中有%符号,但又不希望它被其他内容替换时,因为它后面可能跟着一个字母,从而形成一个实际有效的变量。

%?变量在配置新工具按钮时特别有用,可以确保了解将用作替换参数的内容。

通过%?,DC让您看到实际用于启动某物的命令和参数。

不仅如此,您甚至可以在启动某物时在最后一分钟更改一些内容。

当您不确定要传递给目标应用程序的参数时,这特别有用。

有时百分号和变量字母的组合可能会与系统变量冲突。

例如,如果您输入%os%ot,认为它将被替换为活动和非活动面板文件扩展名的简单连接,您可能会惊讶地发现它在Windows下可能无法正常工作。

序列%os%通常会被操作系统名称替换,因为%os%是代表操作系统名称的系统变量。

这就是%#有用的地方。

在这种示例中,您将输入%##os#ot

%#指示DC从现在开始,#现在是百分号的等价物,这样就不会与可能的系统变量冲突。

这很少需要,但如果需要的话,知道它的存在会让您很高兴!

然后,如果需要,#%将恢复%作为变量的实际百分号前缀。

15. 所有变量的汇总表

本节没有新内容,但让我们将所有支持的变量及其含义汇总到一个表中。

其他变量
表达式描述
%p
完整的文件名,包括路径
%f
仅文件名,包括扩展名
%d
仅路径
%z
路径中最后一个目录
%o
仅文件名,不包括扩展名
%e
仅文件扩展名,不包括点号
%v
相对于当前活动目录的文件名
s
源或活动面板的后缀(示例:%ps)
t
目标或非活动面板的后缀(示例:%pt)
l
左侧面板的后缀(示例:%pl)
r
右侧面板的后缀(示例:%pr)
p
两个面板的后缀,活动面板在前,非活动面板在后(示例:%pp)
b
两个面板的后缀,左侧面板在前,右侧面板在后(示例:%pb)
0
光标下的文件(示例:%ps0)
1
第一个选中的文件(示例:%ps1)
2
第二个选中的文件(示例:%ps2)
3
第三个选中的文件(示例:%ps3)
21
第二十一个选中的文件(示例:%ps21)
{prefix}
{}使用一次,将设置添加到文件名前的前缀(例如:%f{+})
{prefix}{suffix}
{}使用两次,将设置前缀和后缀,分别在文件名前后(例如:%f{[}{]})
%D
默认情况下,活动(源)面板的路径
%Ds
特别指定活动(源)面板的路径
%Dt
非活动(目标)面板的路径
%Dl
左侧面板的路径,无论哪个是活动的
%Dr
右侧面板的路径,无论哪个是活动的
%Z
默认情况下,活动(源)面板路径的最后一个目录名
%Zs
特别指定活动(源)面板路径的最后一个目录名
%Zt
非活动(目标)面板路径的最后一个目录名
%Zl
左侧面板路径的最后一个目录名,无论哪个是活动的
%Zr
右侧面板路径的最后一个目录名,无论哪个是活动的
%"0
从这个位置开始,生成的文件名将不带引号
%"1
从这个位置开始,生成的文件名将带引号
%"
也接受,使生成的文件名重新带引号
%/0
默认情况下,返回的路径将不带结尾分隔符
%/1
返回的路径将带结尾分隔符
%/
也接受,默认情况下,返回的路径将不带结尾分隔符
%L
选中项目文件列表的文件名,仅包含完整文件名(路径+文件名)
%F
选中项目文件列表的文件名,仅包含文件名
%R
选中项目文件列表的文件名,仅包含相对路径名
Q
%L、%F或%R的后缀,用于请求带引号的文件名
U
%L、%F或%R的后缀,用于请求UTF8格式的列表文件
W
%L、%F或%R的后缀,用于请求UTF16格式的列表文件
%t0
在终端中运行并在结束时请求关闭
%t1
在终端中运行并在结束时保持打开
%[message to show]
将显示括号之间指定文本的消息框
%[message;default_val]
将提示用户输入值并提供建议值
%%
将简单地替换为单个%符号
%#
从这个位置开始,#符号将被视为%
#%
从前述状态开始,将使%被视为变量前缀
%?
将显示即将执行的命令行

16. 环境变量

我们可以在Double Commander设置中使用环境变量:在工具栏上的可执行文件名和图标、插件名、收藏目录等。这是一种方便的指定路径的方法,如果我们不想使用绝对路径。

Double Commander支持系统环境变量,并提供了一些自己的环境变量:

环境变量
变量描述
%COMMANDER_EXE%
Double Commander可执行文件的完整名称(路径+文件名)(符号链接将被替换为实际文件)
%COMMANDER_PATH%
Double Commander可执行文件所在的目录
%COMMANDER_DRIVE%
Double Commander文件夹所在的磁盘:
- Windows:驱动器字母(带冒号);
- 类Unix系统:挂载点。
%COMMANDER_INI%
主配置文件(doublecmd.xml)的完整名称(路径+文件名)
%COMMANDER_INI_PATH%
Double Commander配置文件所在的目录
%DC_CONFIG_PATH%
Double Commander配置文件所在的目录

变量名%COMMANDER_PATH%%DC_CONFIG_PATH%不区分大小写,我们可以使用百分号%,而不管操作系统系列(为了向后兼容,这对于跨平台应用程序很方便)。然而,在类Unix系统中,环境变量名区分大小写,并且传统上用大写字母书写,所以使用传统拼写可能是一个好习惯。

在Windows中,我们还可以额外使用格式为%$Name%的伪环境变量,它们对应于标准的Windows系统文件夹(为了获取值,Double Commander使用Windows API中的SHGetSpecialFolderPathSHGetKnownFolderPath函数)。这些不是正常的环境变量,对子进程(从Double Commander启动的应用程序)不可用,但在其他方面我们可以以类似于环境变量的方式使用它们。所有这些变量都收集在路径选择助手菜单中:在文件或目录选择按钮的右侧是按钮选择适当路径的一些功能 选择适当路径的一些功能,描述见此处

所有这些变量都已添加到常用文件夹列表菜单中(特殊目录子菜单)。


最初由Rustem创建(dok_rust@bk.ru)

Valid HTML 4.0 Transitional CSS Valid!