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

[文本处理] 批处理代码修改文件名,去掉字母数字,只留下中文字符

[复制链接]
发表于 2013-4-17 18:15:52 | 显示全部楼层 |阅读模式
批处理代码修改文件名,去掉字母数字,只留下中文字符,不要改动后缀名。 要求代码要简化

以下两行给以测试:
至上励合 - 棉花糖 - 3edcf06e2e701249db08e3c656ed7d8d.lrc
郑源 - 我不恨你 - 909b0e5489433070aeecad2dbc58d3a5.lrc

------------------------------------
现已有答案不够简化,不理想,参考如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p "fp=请拖放要进行改名的文件夹到此: "
  3. pushd "%fp%"
  4. cls
  5. for /f "delims=" %%a in ('dir/b/a-d *.*') do (
  6.   set "string=%%~na"
  7.   set "ext=%%~xa"
  8.   set "old=!string!!ext!"
  9.   set "result="
  10.   call :loop
  11. )
  12. popd
  13. echo Done.
  14. pause
  15. exit
  16. :loop
  17. set "chr="
  18. set "chr=%string:~0,1%"
  19. (echo %chr% | findstr "[a-zA-Z0-9]" || set result=%result%%chr%)>nul
  20. set "string=%string:~1%"
  21. if "%string%"=="" goto done
  22. goto loop
  23. :done
  24. if not "%result%"=="" (
  25. echo [!old!] =^> [!result!!ext!]
  26. ren "!old!" "!result!!ext!"
  27. )
  28. exit/b
复制代码
--------------------------------
求大神解答,感谢!!!!!!
--------------------------------
发表于 2013-4-17 20:27:02 | 显示全部楼层
本帖最后由 tmplinshi 于 2013-4-17 20:38 编辑

http://www. lomont.org/Software/Utilities/Ren2/ren2.exe
  1. ren2 -f "(.*) - [\da-z]+(\.lrc)" "$1$2"
复制代码
如果要包括子目录,加一个 -r 参数。
发表于 2013-4-17 22:32:37 | 显示全部楼层

  1. @echo off
  2. for  %%a in (*.lrc) do (
  3.   for /f "tokens=1-3 delims=-" %%b in ("%%~na") do (
  4.    echo.%%c|findstr "[a-zA-Z0-9]"&&ren "%%a" "%%b.lrc"||ren "%%a" "%%b-%%c"
  5.    )
  6. )
复制代码
在百度知道上看到你的问题,不过你描述的不够彻底,所以没回。
发表于 2013-4-18 09:15:16 | 显示全部楼层
你等的方法太过高级俺大菜鸟一只,能想到的(不用求人)只有笨法:通过TC输出文件列表,用VIM搞成文件名表,再分别用按键精灵读取修改。
确实很笨。
发表于 2013-4-18 10:27:56 | 显示全部楼层
回复 4# 我来了


    既然来到了BatHome,那就好好学习批处理吧。
发表于 2013-4-18 14:38:42 | 显示全部楼层
不知道是大家想的太复杂,还是我想的太过于简单。难道这个答案很难实现吗?
我以为到今天应该有很多很多大牛的代码出来才对。。。。本想来观摩一下的。。

我说说我的理解,就当抛砖引玉了。

纵观楼主所有的文件名,无非以下几种情况:
1、中文-字符
2、中文-中文-字符

我们只需要DELIMS=-来分隔一下,判断第二段(%%B)是否为字符不就结了?
难道我想的不对?
发表于 2013-4-18 16:18:36 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.lrc) do (
  4.     set file=%%a
  5.     ren "%%a" "!file:~0,-39!.lrc"
  6. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 01:19 , Processed in 0.018838 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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