外部控制码

在命令中,可以通过外部控制码来获取选中文件、当前文件夹等的名称或路径,以及当前时间、剪贴板内容,甚至可以显示对话框来输入文本或选择文件。

虽然外部控制码的名称中有“外部”,但它实际上可以与任何命令一起使用,包括 DOpus 内置命令/用户命令和外部的命令行程序。

详见 外部控制码

选中文件

在通过 {file}{filepath} 等控制码获取选中文件时,获取到的文件并不一定与当前实际选中的文件相同。这是因为多行命令在执行过程中不会刷新选中文件,除非执行了 SelectRename 命令。

比如,CreateFolder 命令在创建文件夹后会选中新创建的文件夹,但并不会刷新 {file}

// 选中文件A.txt
Output {file}
CreateFolder "新文件夹B"
// 选中文件A.txt
Output {file}

如果需要刷新 {file},可以添加一条 Select . 命令,例如:

// 选中文件A.txt
Output {file}
CreateFolder "新文件夹B"
Select .
// 新文件夹B
Output {file}

注意,即使没有直接使用 {file},一些默认对选中文件执行操作的命令也会隐式使用到它,导致问题。比如在粘贴文件后,为新粘贴的文件添加标记:

Clipboard PASTE
Properties ADDLABEL SETLABEL="蓝色"

由于 Clipboard PASTE 不会刷新选中文件,Properties ADDLABEL 实际上无法对粘贴后的文件进行操作,导致失败。可以添加 Select . 来进行刷新:

Clipboard PASTE
Select .
Properties ADDLABEL SETLABEL="蓝色"

但是添加 Select . 以后,Properties ADDLABEL 实际上也只会对粘贴的第一个文件生效。这是因为 Select . 在某些情况下只会刷新 {file} 为多个选中文件中的第一个,而不是所有文件。在这种情况下需要通过脚本进行手动刷新:

function OnClick(clickData)
{
    var cmd = clickData.func.command;

    cmd.RunCommand('Clipboard PASTE');

    // 刷新选中文件
    cmd.ClearFiles();
    clickData.func.sourcetab.Update();
    cmd.AddFiles(clickData.func.sourcetab.selected);

    cmd.RunCommand('Properties ADDLABEL SETLABEL="蓝色"');
}

最后更新于