WPS JSA批量重命名工具(Window/Linux通用)

截图:

下载:

【金山文档 | WPS云文档】 JSA-文件批量重命名-20260507new

https://www.kdocs.cn/l/cmVCJe43Uz3D

2026年5月7日更新了:

1. 文件名排序用自然排序,10排9后面,而不是排1后面;

2. 做了一些优化;

3. 添加了测试函数;

4. 修复了一些逻辑,但可能又引入了新了bug.

基于JSA编写,代码量在1000行以上,在WPS Linux版和Windows版上顺利测试通过,用了很多回退技术(没有使用Shell命令,用了一些C API),对WPS版本要求不高,支持JSA就行,我试过的1XXXX版本也能正常运行。结合WPS的regexp函数及Exiftool,绝对的重命名利器。

不关闭沙箱也能完成常见文件的重命名(如果不关闭沙箱常见可执行文件后缀如.exe|.dll|.sys|.bat|.ps1|.reg|.com|.scr|.vbs|.cmd会重命名失败)。

实测2000个文件也只在分秒之间完成。

如果想修改后缀名:把后缀名列内容删除,把后缀名分别附加到旧文件名中和新文件名中即可。

里面的代码和思路非本人原创,程序主要参考 ExcelHome lizhipei78 的思路。

和WPS社区论坛wils的相关知识贴子。

里面有一些系统API,FileSystem对象,FFI,ExecuteExcel4Macro的使用,新手是可以学习借鉴。

代码99.99都是鞭策Deepseek编写,我主要负责debug和提要求。

优点(Deepseek说的):

1. 超长路径全面支持

自动添加 \\?\ 前缀:在 Windows 下对所有绝对路径统一加上扩展前缀,彻底解除了 260 字符的 MAX_PATH 限制。

遍历、判断、重命名、权限检查 全部打通:getAllFiles、isFile/isDirectory、renameFile、dirWritable 均适配了长路径,实测可正确处理数百字符的深层乱码目录。

2. 跨平台统一接口

Windows:使用 FileSystem.readdirSync 遍历、FileSystem.copyFileSync + unlinkSync 实现重命名;回退方案保留 MoveFileExA。

Linux:使用 libc.so.6 的 rename 完成重命名,路径保持原生 UTF-8,无需特殊前缀。

同一套代码在两个平台无缝运行,无需用户判断环境。

3. Unicode 文件名完美处理

重命名主方案弃用 ANSI API,改用 FileSystem.copyFileSync + unlinkSync,内部基于 Unicode,完美支持日文、韩文、特殊符号、甚至组合表情。

即使文件名包含逗号、单引号、双引号、&、% 等,也能通过 xlEscape 安全传入宏,同时不被错当分隔符。

4. 极高的健壮性

双引擎重命名:优先复制+删除(支持大文件、跨卷),失败时自动回退到带只读清理的 MoveFileExA。

目录/文件判断绝对可靠:用 readdirSync 实际读目录内容来判定,无扩展名猜测、无 Dir 属性误判。

权限检查完善:写权限通过真实创建临时文件验证,执行权限通过系统 API 查询,提供明确的错误信息。

冲突交互人性化:目标文件已存在时弹出对话框,支持“替换/跳过/取消”以及“全部应用”,操作记入 E 列。

单引号自动防护:用零宽空格标记保护前导单引号,避免被 WPS 误当文本标识符吞噬。

5. 大数据量稳定写入

采用分批写入(默认 200 行/批)向工作表输出文件列表,避免一次性写入数万行导致的崩溃。

每批写入均包含 try-catch,失败后自动降级为逐行写入,确保文件列表不丢失。

6. 遍历性能与正确性兼顾

getAllFiles 直接使用 FileSystem.readdirSync 递归,无嵌套 Dir 状态冲突,无漏文件。

在包含 2000+ 个乱码文件的超长目录下已实测通过,速度与稳定性远超传统 Dir 或 FileSearch。

7. 代码结构纯净、易扩展

无全局变量污染:所有状态(平台缓存、最大路径长度等)均以函数静态属性存储,符合 JSA 宏安全限制。

函数职责单一,注释详尽。若需新增“移动模式”或“备份功能”,只需简单调整 renameFile 即可

浏览 242
3
13
分享
13 +1
6
3 +1
全部评论 6
 
JW L
先在终端中export LD_LIBRARY_PATH,再在终端中执行wps就可以。为什么在个人账户.bashrc进行export 却不行,不理解
·
回复
wils
wilsLv.2 潜力创作者

Lv.2潜力创作者

很多系统的.bashrc只对交互式shell有效,调用的shell不执行.bashrc
· 海南省
回复
 
李强
膜拜!!!
· 山西省
回复
 
123456
膜拜大佬
· 山东省
1
回复