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

[文本处理] 求一个批量删除文件后缀中文的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 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
复制代码

TOP

回复 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
复制代码

TOP

回复 2# aloha20200628


    非常感谢大神,谢谢!

TOP

返回列表