【QTTabBar】手把手教你QTTabBar命令栏js脚本的自定义开发与实战

本帖最后由 二零一八小王子 于 2024-8-31 21:45 编辑

<ignore_js_op>

众所周知,360压缩有一个解压功能,也就是打开压缩包后点击“一键解压”就可解压完成并且打开目标文件夹。

今天这里要实现的是在qttabbar的命令按钮,也就是上面的工具栏处,使用js编写一个一键解压功能。也就是对于一个压缩包解压后那么自动打开对应文件夹,对于多个选中的压缩包那么打开第一个或者最后一个压缩包对应的文件夹,根据系统判断的来确定。

该代码解压过程中已经考虑到了将压缩包文件名作为文件夹名称,防止解压带来一片狼藉的问题。

使用代码的前情需要:你是使用qttabbar的用户,你是对命令按钮有需求的用户,该代码主要是让你学会怎么使用js来编写满足自己需求的功能。


1 新建一个txt改为.js,在里面写代码如下面所示(如果你的winrar路径不是正常默认路径请在代码位置里面修改)。
2 将该js代码命名为:解压文件.js,后面需要使用
3 按照下面图片的方法,调出命令栏
<ignore_js_op>

4 按照下图添加自定义项目
<ignore_js_op>
5 其中④写的是【  %SystemRoot%\System32\wscript.exe 】不含中括号,⑤填写的是 解压文件.js 的所在绝对路径。这样一来,使用的时候,只需要在当前文件夹选中一个或者多个压缩包,点击【一键解压】就可以完成解压文件了。
<ignore_js_op>

【解压文件.js】的代码内容如下:
[JavaScript] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
var qs = new ActiveXObject("QTTabBarLib.Scripting"); // 获取QTTabBar脚本根对象
var wnd = qs.activewindow; // 获取当前活动的文件夹窗口
var activeTab = wnd.ActiveTab;
var currentPath = activeTab.Path; // 当前文件夹
var fso = new ActiveXObject("Scripting.FileSystemObject");
var shell = new ActiveXObject("WScript.Shell");
 
if (wnd) {
        var selectedItems = wnd.SelectedItems; // 获取选中的项目
        if (selectedItems.Count > 0) {
                // 检查所有选中的项目是否都是归档文件
                var allAreArchives = true// 假设所有文件都是归档文件,直到发现不是为止
                var archives = []; // 存储所有归档文件的路径
                for (var i = 0; i < selectedItems.Count; i++) {
 
                        var rarFilePath = selectedItems.Item(i); // 获取文件名
                        //qs.alert(rarFilePath);
                        if (isRAR(rarFilePath))
                        {
                                // 如果是归档文件,保存文件路径
                                archives.push(rarFilePath);
                        else
                        {
                                allAreArchives = false// 如果有任何文件不是归档文件,标记为false
                                break// 不需要再检查其他文件
                        }
                }
 
                // 根据结果弹出提示
                if (allAreArchives) {
                        // =====================================全是归档文件,开始解压================================
                        var extractFolder = currentPath; // 选择解压到当前窗口目录
                        for (var j = 0; j < archives.length; j++) {
                                 
                                var archive = archives[j]; //选中的压缩包列表提取第j个绝对路径
                                 
                                // x代表的是解压文件
                                // -ad 表示以压缩包文件名作为解压后的文件夹,防止解压在当前文件夹带来的散乱现象         
                                // archive代表待解压的压缩包路径,这里是选中的对象的全路径。
                                // extractFolder 代表的是解压的文件夹目标,这里即当前文件夹
                                 
                                /*在 Windows 上,通过命令行运行包含空格或特殊字符的路径时,需要将这些路径用双引号包围。
                                为了防止 archive 或 extractFolder 中的空格或特殊字符
                                (如 -)导致命令行解析错误,我们可以在构建命令字符串时对这些路径进行适当的处理。
                                */
                                 
                                //根据实际路径修改
                                var command_extract = '"C:\\Program Files\\WinRAR\\WinRAR.exe" x -ad "' + archive + '" "' + extractFolder + '"';
  
                                try {
                                        shell.exec(command_extract); // 运行解压命令,等待完成
                                }
                                catch(err) {
                                        qs.alert("解压过程中发生错误: " + err.message +"\n"+"或者是你的文件夹路径太长导致的!");
                                }
                        }
                          
                        //=========================上面全部解压完成,需要打开一个目标文件夹=========================
                        //如果只有一个文件那么打开这个目标文件夹,否则打开选择的多个里面的第一个
                        var archive_fullpath = archives[0];
 
                        // 使用 GetFileName 获取文件名称,包括后缀
                        var fileNameWithExtension = fso.GetFileName(archive_fullpath);
 
                        // 去除后缀,获取文件名
                        var fileNameWithoutExtension = fileNameWithExtension.substring(0, fileNameWithExtension.lastIndexOf("."));
 
                        var targetFolder = currentPath + "\\" + fileNameWithoutExtension
                        //qs.alert(targetFolder)
                        // 如果 targetFolder 包含空格或特殊字符,那么你应该将其用双引号包围,以确保命令行能够正确解析路径。
                        var command_open_target_folder = 'explorer "' + targetFolder + '"';
 
                        try {               
                                         
                                // 等待 1 秒 (1000 毫秒) 后打开文件夹,因为前面文件夹还未必已经建立完毕,故而加入等待                               
                                WScript.Sleep(1000); // 2000 毫秒 = 2 秒
                                shell.exec(command_open_target_folder);
 
                                  
                                 
                        }                        
                        catch(err) {
                                qs.alert("无法打开文件夹: " + err.message);
                        }
                          
 
                        // qs.alert("所有压缩包已解压到当前目录。");
                else {
                        qs.alert("并非所有选中的项都是压缩包,请重新选择");
                }
        }
 
        else //没有任何选中
                qs.alert("没有选中的项。"); // 如果没有选中任何文件
        }
}
 
 
function isRAR(fileName) {
        var suffix = ''// 后缀获取
        var result = ''// 获取类型结果
        if (fileName) {
                var fileArr = fileName.split('.'); // 根据.分割数组
                suffix = fileArr[fileArr.length - 1]; // 取最后一个
        }
        if (!suffix) return false// fileName无后缀返回false
        suffix = suffix.toLocaleLowerCase(); // 将后缀所有字母改为小写方便操作
        suffix = '.' + suffix; //字符串拼接
        // 定义归档文件类型的后缀名列表
        var rarList = ['.rar''.zip''.7z''.tar''.gz''.bz2''.xz''.iso''.cab''.arj''.lzh''.ace'];
 
        var result;
        for (var i = 0; i < rarList.length; i++) {
                if (rarList[i] === suffix) {
                        result = rarList[i];
                        break;
                }
        }
 
        if (result)
 
        {
                return true;
        else {
                return false;
        }
 
}



参考资料:
http://qttabbar.wikidot.com/scripting
https://sspai.com/post/52521


【解压文件.js】的下载地址:
https://wwnb.lanzoul.com/b02sez3h9a


密码:2e5h
posted @ 2024-09-02 10:24  IssacNew  阅读(5)  评论(0编辑  收藏  举报