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

[文件操作] 【已解决】求批处理命令,将文件夹里的所有文件重命名仅保留字母数字和标点字符,内详

[复制链接]
发表于 2024-5-21 23:34:29 | 显示全部楼层 |阅读模式
本帖最后由 crownking1983 于 2024-5-22 20:14 编辑

求批处理命令,将文件夹里的所有文件重命名仅保留字符、字母和数字。
实例如下:

一个文件夹里有文件
2024.05.12 美杜莎 [15P 266M].zip
2024.05.14 小舞 [26P 204M].txt
2024.05.19 千仞雪 [20P 534M].rar

批处理命令执行后 这些文件名变成

2024.05.12 [15P 266M].zip
2024.05.14 [26P 204M].txt
2024.05.19 [20P 534M].rar

也就是将所有的汉字去掉 仅保留字母数字和标点字符。谢谢各路大神

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-5-22 10:10:55 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-5-22 10:16 编辑

回复 1# crownking1983

好在文件名中的中文字段有空格界定,代码简化多了...

  1. @echo off & for /f "delims=" %%F in (' dir /b/a-d "* * [*].*" ') do (
  2.         for /f "tokens=1-2* delims= " %%a in ("%%~nxF") do ren "%%F" "%%a %%c"
  3. )
  4. pause&exit/b
复制代码
 楼主| 发表于 2024-5-22 18:51:44 | 显示全部楼层
回复 2# aloha20200628


    那大神,请问中文与字母数字之间没有空格的话,会是什么样的呢?能否出一个中文与字母数字之间不带空格的批处理代码,以便以后遇到了使用
 楼主| 发表于 2024-5-22 19:26:46 | 显示全部楼层
本帖最后由 crownking1983 于 2024-5-22 19:27 编辑

回复 2# aloha20200628


貌似格式必须是固定的死的方可
发表于 2024-5-22 19:45:42 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-5-22 20:01 编辑

回复 3# crownking1983

好吧,再给一个剔除中文字段的版本,无论其前后有无空格...

  1. @echo off &setlocal enabledelayedexpansion
  2. for /f "delims=" %%F in (' dir /b/a-d "* * [*].*" ') do (
  3.         (call :_cutHZ "%%~nF" cF)
  4.         ren "%%F" "!cF!%%~xF"
  5. )
  6. endlocal&pause&exit/b
  7. :_cutHZ //REM 剔除文件名中包含的全部中文字符 限定文件名最大长度=260
  8.         set "$s=%~1"&set "_s="
  9.         for /L %%n in (0 1 260) do (
  10.            set "c=!$s:~%%n,1!" &if "!c!"=="" set "%~2=!_s!" &exit/b
  11.            if "!c!" leq "Z" set "_s=!_s!!c!"
  12.         )
  13.         exit/b
复制代码

如果不约束文件名格式,只须剔除其中的中文字段,则可改变以上代码第2行如下
  1. for /f "delims=" %%F in (' dir /b/a-d "*.*" ') do (
复制代码

评分

参与人数 1技术 +1 收起 理由
crownking1983 + 1 乐于助人

查看全部评分

发表于 2024-5-22 19:51:36 | 显示全部楼层
保存为ansi或gbk编码的bat

  1. @echo off&pause
  2. set "@self=%~nx0"
  3. chcp 437>nul
  4. setlocal enabledelayedexpansion
  5. set aaa=1
  6. for /f "eol=/ delims=" %%i in ('dir /b') do (
  7. if "!aaa!" == "%aaa%" endlocal&chcp 936>nul
  8. set /a ccc+=1
  9. set @file=%%i
  10. call set @file%%ccc%%=%%@file%%
  11. )
  12. for /f "eol=/ delims=" %%i in ('dir /b') do (
  13. set /a bbb+=1
  14. set @file=%%i
  15. setlocal enabledelayedexpansion
  16. for %%c in (!bbb!) do (
  17. if "!@file!" neq "!@self!" (
  18. echo,rename "!@file!"  to "!@file%%c:?=!"
  19. rename "!@file!" "!@file%%c:?=!"
  20. )
  21. )
  22. endlocal
  23. )
  24. pause&exit/b
复制代码
 楼主| 发表于 2024-5-22 20:12:58 | 显示全部楼层
回复 5# aloha20200628


    实在是太牛逼了!感谢大佬!
 楼主| 发表于 2024-5-22 20:13:20 | 显示全部楼层
回复 6# Five66


    这个也好牛逼啊 感谢大佬!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 00:35 , Processed in 0.016407 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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