ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 416|回复: 1

[分享] 用JS宏批量修改文件名——提高修改速度的一种方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-14 17:55 | 显示全部楼层 |阅读模式
JS宏没有直接的修改文件名的方法,所幸的是有Shell()函数可以调用外部命令。于是我们可以通过间接的方式来实现批量修改文件名。
比如这样的写法:
  1. Shell(`cmd.exe /c cd /d "${path<font color="#add8e6">(这里写路径)</font>}"&&rename "${oldName<font color="#add8e6">(这里写旧文件名)</font>}" "${newName<font color="#add8e6">(这里写新文件名)</font>}"`, 0)
复制代码
自然地,我们可以用JS中的各类循环,比如for或者数组的forEach等来循环调用shell以实现批量修改文件名。

结合wps的智能填充、文本替换充等功能,以及各种简单好用的公式,我们可以非常轻松地实现想要的批量重命名。甚至比很多专门的重命名工具更好用,更自由。

但这种做法的缺点是运行很慢。在测试用的笔记本电脑上,批量修改500个文件用时了40多秒(如图1.jpg)。相较之下,某些专门的重命名工具则可以做到秒改。

JS宏批量修改文件名要想真正好用,提高速度势在必行!




笔者对Shell或者cmd等并不熟悉,但查阅得知shell脚本本身修改文件名的速度是可以达到每分钟百万级的。
于是想到可能是JS宏调用Shell的速度太慢了。
因此要用尽可能少的shell调用次数来实现同样的功能。
可惜笔者不会写shell里的循环等命令。
只好尝试把单句单句的命令写在一个字符串里,让它变成一条命令丢给shell去执行
这么做居然是可以的,不过也有限制条件,就是这个单句的字符串长度不能过长,否则shell就不执行了,而且也不报错,直接跳过这条指令。
粗略测试中发现的最长可执行长度为8193字符(好像只与字符数有关,与字节数无关)。
因此设置超过8000字符就执行一次shell,随后重新累加一个新的指令,这样也能一条命令修改大约200个文件(随文件名长度而变化)。

新的方法虽然拙劣,但是对于速度有明显提升,500文件修改只用不到0.1秒(如图2.gif)!!!


这里分享一下相关文件,供大家讨论参看。
也希望各位大佬不吝赐教,多多批评指正!


image.jpg

图1↑

GIF 2024-8-14 17-37-46.gif


图2↑


批量修改文件名.zip

98.77 KB, 下载次数: 30

内含一个批量修改宏工作簿,和一些测试用的空txt文件

TA的精华主题

TA的得分主题

发表于 2024-8-15 19:46 | 显示全部楼层
感谢分享,学习一下
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 01:32 , Processed in 0.052059 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表