【智能解压】为WinRAR和7-Zip添加智能解压功能

你这个办法好,不过我让AI用的DO自带的脚本:
第一步:进入文件类型设置
在 DOpus 顶部的菜单栏中,点击 设置 (Settings)。
选择 文件类型 (File Types…),会弹出一个新的管理窗口。
第二步:定位“压缩文件”分组
为了让菜单只在点击压缩包时出现,我们不应该把它加到“所有文件”里,而是加到特定的文件组里:
在弹出的窗口中,找到并展开第一类:文件类型组 (File Type Groups)。
在列表里向下找,双击 压缩文件 (Archives)(英文版叫 Archives)。
这会打开一个专门针对压缩包类型的编辑窗口。
第三步:添加右键菜单项
在打开的窗口顶部,切换到 快捷菜单 (Context Menu) 选项卡。
点击右侧的 新建 (New…) 按钮。
在弹出的菜单属性窗口中:
标签 (Label):输入你想在右键菜单里看到的名字,比如 WinRAR 智能解压。
类型 (Type):保持默认的 运行 Opus 功能 (Run an Opus function)。
第四步:填入脚本代码

@script jscript

function OnClick(clickData) {
    var tab = clickData.func.sourcetab;
    var cmd = clickData.func.command;
    var fsu = DOpus.FSUtil;
    
    // ⚠️请确认你的 WinRAR 路径无误
    var winrarPath = "\"C:\\Program Files\\WinRAR\\WinRAR.exe\"";
    
    // 如果没有选中任何文件,直接退出,避免报错
    if (tab.selected_files.count === 0) {
        return;
    }
    
    cmd.deselect = false; 
    cmd.ClearFiles();     

    for (var e = new Enumerator(tab.selected_files); !e.atEnd(); e.moveNext()) {
        var item = e.item();
        
        var ext = String(item.ext).toLowerCase();
        if (!ext.match(/\.(rar|zip|7z|tar|gz|bz2)$/)) {
            continue;
        }
        
        var folderEnum = fsu.ReadDir(item.realpath, false); 
        var itemCount = 0;
        var multipleRootItems = false;
        
        if (folderEnum.error === 0) {
            while (!folderEnum.complete) {
                folderEnum.Next();
                itemCount++;
                if (itemCount > 1) {
                    multipleRootItems = true;
                    break;
                }
            }
        } else {
            multipleRootItems = true; 
        }
        
        var extractCmd = "";
        
        if (multipleRootItems || itemCount === 0) {
            extractCmd = winrarPath + " x -ad -y \"" + item.realpath + "\" \"" + tab.path + "\\\"";
        } else {
            extractCmd = winrarPath + " x -y \"" + item.realpath + "\" \"" + tab.path + "\\\"";
        }
        
        cmd.RunCommand(extractCmd);
    }
}