Board logo

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

作者: crownking1983    时间: 2024-5-21 23:34     标题: 【已解决】求批处理命令,将文件夹里的所有文件重命名仅保留字母数字和标点字符,内详

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

也就是将所有的汉字去掉 仅保留字母数字和标点字符。谢谢各路大神
作者: aloha20200628    时间: 2024-5-22 10:10

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

作者: crownking1983    时间: 2024-5-22 18:51

回复 2# aloha20200628


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

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

回复 2# aloha20200628


貌似格式必须是固定的死的方可
作者: aloha20200628    时间: 2024-5-22 19:45

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

作者: Five66    时间: 2024-5-22 19:51

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

作者: crownking1983    时间: 2024-5-22 20:12

回复 5# aloha20200628


    实在是太牛逼了!感谢大佬!
作者: crownking1983    时间: 2024-5-22 20:13

回复 6# Five66


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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2