本帖最后由 二零一八小王子 于 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 ;
}
}
|
参考资料:
1 http://qttabbar.wikidot.com/scripting
2 https://sspai.com/post/52521
【解压文件.js】的下载地址:
https://wwnb.lanzoul.com/b02sez3h9a
密码:2e5h 标签:解压,qs,自定义,js,文件夹,var,QTTabBar,压缩包 From: https://www.cnblogs.com/issacnew/p/18392262