首页 > 其他分享 >【QTTabBar】手把手教你QTTabBar命令栏js脚本的自定义开发与实战

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

时间:2024-09-02 10:26:16浏览次数:11  
标签:解压 qs 自定义 js 文件夹 var QTTabBar 压缩包

本帖最后由 二零一八小王子 于 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\cscript.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

标签:解压,qs,自定义,js,文件夹,var,QTTabBar,压缩包
From: https://www.cnblogs.com/issacnew/p/18392262

相关文章

  • 添加到MySQL中的json
    要将JSON数据添加到MySQL中,你可以使用MySQL提供的JSON数据类型。以下是一般的步骤:确保你的MySQL版本支持JSON数据类型。JSON数据类型在MySQL5.7及更高版本中可用。创建表时,将包含JSON数据的列定义为JSON类型。例如:CREATETABLEyour_table(idINTPRIMARY......
  • priority_queue自定义排序
    priority_queue自定义排序原文章地址,本文章仅作为学习记录https://www.cnblogs.com/shona/p/12163381.htmlpriority_queue本质是一个堆。头文件是#include<queue>关于priority_queue中元素的比较模板申明带3个参数:priority_queue<Type,Container,Functional>,其中Typ......
  • 家庭能源网关开发历程(三)JSY-MK-163串口中断发送接收
     前言        大家好,我是菜菜,在上一期我们主要介绍了关于JSY-MK-163串口通讯配置流程。由于上期没有打印结果,我怕有一些小伙伴还是不懂,本期我们就来实现项目主控MCU华大HC32F005的UART中断发送和接收数据的结果打印。首先,我们先看看用到UART的那些功能函数。UART功......
  • 常见的数据交换格式:JSON、Proto、XML和YAML
    原创控制工程研习proto、json、xml和yaml是四种常见的数据交换格式,它们的全称分别是:ProtocolBuffers(Proto)、JSON(JavaScriptObjectNotation)、XML(ExtensibleMarkupLanguage)和YAML(YAMLAin'tMarkupLanguage)。ProtocolBuffers(Proto)ProtocolBuffers......
  • Jsoncpp的安装与使用
    目录安装JsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数组的操作对Json对象的操作 FastWriter类 Reader类JsonCpp是一个C++库,用于解析和生成JSON数据。它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式。安装Jsonc......
  • JS设计模式之“语言之魂” - 原型模式
    前言当我们学习JavaScript的时候,经常会听到原型(prototype)、原型链(prototypechain)和原型模式(prototypepattern)这些概念,它们之间有什么关联呢?怎么样才能使用好原型模式呢?一.“语言之魂”-原型模式概念原型模式是JavaScript语言的核心机制之一,是JavaScript中最基本......
  • 基于SpringBoot+Vue+uniapp的医院在线挂号预约系统的+jsp的详细设计和实现(源码+lw+部
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • MyBatis如何自定义项目中SQL日志
    说明:用过MyBatis框架的同学们都知道,打印SQL日志,可以通过在application.yml配置文件中加入下面配置来设置:mybatis:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl但打印出来的SQL如下,丑陋不堪,不够优雅本文介绍如何自定义SQL日志拦截器......
  • 使用 Supabase 保护 Next.js 路由
    要使用Supabase保护Next.js路由,你可以按照以下步骤进行操作:1.安装所需的依赖:在你的Next.js项目中,安装`@supabase/supabase-js`和`next-auth`库。2.配置Supabase:在你的项目中创建一个`.env.local`文件,并添加你的Supabase项目的URL和API密钥。3.创建认证页......
  • C#自定义控件—转换开关
    C#用户控件之转换开关如何自定义一个转换键(Toggle)?三步绘制一个精美控件:定义属性;画布重绘;添加事件;主要技能:如何自定义属性;画布重绘的一般格式;控件的事件触发过程;技能扩展转换按钮使能时添加二次确认弹框?在From窗体中应用控件时,点击事件没有触发?属性名称在......