Board logo

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

作者: xin74920    时间: 2013-4-17 18:15     标题: 批处理代码修改文件名,去掉字母数字,只留下中文字符

批处理代码修改文件名,去掉字母数字,只留下中文字符,不要改动后缀名。 要求代码要简化

以下两行给以测试:
至上励合 - 棉花糖 - 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
复制代码
--------------------------------
求大神解答,感谢!!!!!!
--------------------------------
作者: tmplinshi    时间: 2013-4-17 20:27

本帖最后由 tmplinshi 于 2013-4-17 20:38 编辑

http://www. lomont.org/Software/Utilities/Ren2/ren2.exe
  1. ren2 -f "(.*) - [\da-z]+(\.lrc)" "$1$2"
复制代码
如果要包括子目录,加一个 -r 参数。
作者: Bearxy    时间: 2013-4-17 22:32

  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

你等的方法太过高级俺大菜鸟一只,能想到的(不用求人)只有笨法:通过TC输出文件列表,用VIM搞成文件名表,再分别用按键精灵读取修改。
确实很笨。
作者: BAT-VBS    时间: 2013-4-18 10:27

回复 4# 我来了


    既然来到了BatHome,那就好好学习批处理吧。
作者: Bearxy    时间: 2013-4-18 14:38

不知道是大家想的太复杂,还是我想的太过于简单。难道这个答案很难实现吗?
我以为到今天应该有很多很多大牛的代码出来才对。。。。本想来观摩一下的。。

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

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

我们只需要DELIMS=-来分隔一下,判断第二段(%%B)是否为字符不就结了?
难道我想的不对?
作者: BAT-VBS    时间: 2013-4-18 16:18

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.lrc) do (
  4.     set file=%%a
  5.     ren "%%a" "!file:~0,-39!.lrc"
  6. )
复制代码





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