Board logo

标题: [文本处理] 求一个批量删除文件后缀中文的bat脚本 [打印本页]

作者: U0BXS3    时间: 2024-6-14 18:59     标题: 求一个批量删除文件后缀中文的bat脚本

求助大神,有一需求是将同一目录下的所有文件(不包括文件夹)的后缀中的中文删除,例如将“file.7中z文”变为“file.7z”
中文可能存在在不同位置,将其删除后保持原后缀顺序即可,例如,可能存在:
"file1.7中z文"
"file2.z有i中p文"
"file3.rar中文在这"
运行后期望得到:
"file1.7z"
"file2.zip"
"file3.rar"
希望大神能不吝赐教,感谢!
作者: aloha20200628    时间: 2024-6-14 19:52

本帖最后由 aloha20200628 于 2024-6-14 20:09 编辑

回复 1# U0BXS3
  1. @echo off &for /f "delims=" %%F in ('dir/b/s/a-d') do (
  2. set "F=%%F"&set "nF=%%~nF"&set "xF=%%~xF" &setlocal enabledelayedexpansion
  3. set "xH=" & (call :cutHZ "!xF!" xH)
  4. if defined xH if "!xF!" neq "!xH!" (ren "!F!" "!nF!!xH!" 2>nul)
  5. endlocal
  6. )
  7. pause&exit/b
  8. :cutHZ // 删除扩展名中包含的全部中文字符 限定扩展名最大长度=16(可自定义即修改下面一行中的数字16)
  9. set "$s=%~1"&set "_s="&for /L %%n in (0 1 16) 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
复制代码

作者: aloha20200628    时间: 2024-6-14 20:37

回复 1# U0BXS3

再给一个不用限定扩展名长度的版本
  1. @echo off &for /f "delims=" %%F in ('dir/b/s/a-d') do (
  2. set "F=%%F"&set "nF=%%~nF"&set "xF=%%~xF"&setlocal enabledelayedexpansion
  3. set "xH="&set "_xF=!xF!" & (call :cutHZ)
  4. if defined xH if "!xF!" neq "!xH!" (echo,ren "!F!" "!nF!!xH!" 2>nul)
  5. endlocal
  6. )
  7. pause&exit/b
  8. :cutHZ // 删除扩展名中包含的全部中文字符
  9. if "!_xF!"=="" (exit/b) else (
  10. set "c=!_xF:~,1!" &if "!c!" leq "Z" (set "xH=!xH!!c!")
  11. set "_xF=!_xF:~1!" &goto :cutHZ
  12. )
  13. exit/b
复制代码

作者: U0BXS3    时间: 2024-6-14 20:51

回复 2# aloha20200628


    非常感谢大神,谢谢!




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