找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 48|回复: 0

[文本处理] 进一步提升处理文件名字符的效率

[复制链接]
发表于 昨天 13:41 | 显示全部楼层 |阅读模式
本帖最后由 aloha20200628 于 2026-6-21 17:21 编辑

    从很多老帖中处理文件名的种种方法可见,采用 call 或 goto 方法的遍历效率明显低于采用 for /L 方法,但很多具体应用代码中采取 for /L 循环上限的方法很随意。
    其实直接采用系统规范单个文件名(不含路径)的最大长度(255个字符)给 for /L 循环量定限,是一个不错的选择,类似于计算字符串长度的经典算法所取的字符串变量最大长度(8KB 字节量)。
    如此定限的 for /L 方法,其运行效率明显高于那些采用 call 或 goto 的遍历方法,示例代码可见 https://bbs.bathome.net/thread-1251-1-1.html 22楼。
    若还可选择系统内置的其他脚本,如 jscript,powershell 中的正则替换方法,当然代码运行效能会更加精进,尤其是用于数据量较大的实况。
    以下是针对上述老帖一楼题目的两个示例代码,powershell 版本和 jscript 版本,前者将 '文件名正则替换+文件批量更名' 一气呵成,后者仅用 jscript 完成文件名正则替换...

重命名-p.bat
  1. @echo off &powershell -c "dir -file * -exclude '%~nx0'|%%{ $f=($_.basename -replace '[^a-z]', '')+$_.extension; """ren $_ $f"""; }" &exit/b
复制代码

重命名-j.bat
  1. 2>1/* :: REM 删除文件名中非英文字母以外的所有字符
  2. @echo off &for %%F in (*) do if "%%~nxF" neq "%~nx0" (for /f "delims=" %%f in ('cscript /nologo /e:jscript "%~f0" "%%~nF" ') do ren "%%F" "%%f%%~xF" )
  3. exit/b */
  4. v=WSH.arguments, WSH.echo(v(0).replace(/[^a-z]/ig,'')), WSH.quit();
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-6-22 02:24

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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