[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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
复制代码

TOP

回复 2# aloha20200628


    那大神,请问中文与字母数字之间没有空格的话,会是什么样的呢?能否出一个中文与字母数字之间不带空格的批处理代码,以便以后遇到了使用

TOP

本帖最后由 crownking1983 于 2024-5-22 19:27 编辑

回复 2# aloha20200628


貌似格式必须是固定的死的方可

TOP

本帖最后由 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

评分人数

TOP

保存为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
复制代码

TOP

回复 5# aloha20200628


    实在是太牛逼了!感谢大佬!

TOP

回复 6# Five66


    这个也好牛逼啊 感谢大佬!

TOP

返回列表