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

[文件操作] 求助批处理删除文件名称中的汉字只保留数字?

意思是这样的。

比如有这么个名子 "批处理之家01"   

然后直接把它改成01 。只判断可有数字。有数字就保留数字。其它全部删除。

因为我这里的电影服务器高达10W部电影。都是这样的命名。现在要改了。手动的话就要累死了。

哈哈!!!!!!!!!!!!!!!!!!!!!!!!!多谢.....我写了个小程序解决了...

TOP

将你们的改进一下:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/s/b *.rm^|findstr /ie "[0-9]\.rm"') do (
  3.     set strFullName=%%a&set strName=%%~nxa
  4.     setlocal enabledelayedexpansion
  5.     call :lp
  6.     echo ren "!strFullName!" "!strName!"
  7.     endlocal
  8. )
  9. pause&exit/b
  10. :lp
  11. for /f "tokens=1* delims=0123456789" %%a in ("!strName!") do (
  12.     if not "%%b"=="" set strName=!strName:*%%a=!&goto lp
  13. )
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

我也来一个
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/s/b *.rm^|findstr /ie "\.rm"') do (
  3.     set str=%%a
  4.     setlocal EnableDelayedExpansion
  5.     call :check
  6.     for %%i in (!NaN!) do echo ren "!str!" "!str:~-%%i!"
  7.     endlocal
  8. )
  9. pause&exit/b
  10. :check
  11. for /l %%i in (4 1 260) do (
  12.     if "!str:~-%%i,1!" lss "0" (goto :eof) else if "!str:~-%%i,1!" gtr "9" goto :eof
  13.     set NaN=%%i
  14. )
复制代码
上面为什么到260,是因为UNC通用命名规则规定:路径(文件的完整路径)的最大长度为260个字符。(显然文件名无法件取到260个字符,但上面的代码写260也不会影响效率)

[ 本帖最后由 zqz0012005 于 2009-3-21 00:27 编辑 ]
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

也发一个
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b/s/a-d c:\rm\*.rm') do (
  3.        set str=%%~nxi
  4.        call :lp "%%~ni"
  5.        if not exist "%%~dpi!str!" ren "%%i" "!str!"
  6.        )
  7. pause&exit
  8. :lp
  9. for /f "tokens=1* delims=0123456789" %%i in (%1) do (
  10.     if "%%i"=="" goto :eof
  11.     set str=!str:%%i=!
  12.     call:lp "%%j"
  13. )
复制代码

TOP

回复 13楼 的帖子

好好看看批处理基础教程吧,总想要现成的代码不利于自己的提高。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

代码中只有2个echo 你说去掉哪个呢?
技术问题请到论坛发帖求助!

TOP

经过测试。全部不通过。
另外问一下随风。在哪去掉echo?

TOP

::只保留文件名中的数字(不考虑改名后重名的情况)
::如果演示结果无误,把ren前面的echo去掉,即可实现真正重命名。
::文件名不能含有 ! & 符号。
  1. @echo off&Setlocal EnableDelayedExpansion
  2. for /l %%a in (0 1 9) do set .%%a=a
  3. for /f "delims=" %%a in ('dir/b/s/a-d *.rm') do (
  4.    set str=&set num=%%~na
  5.    set "num=!num: =!"
  6.    for /l %%i in (0 1 9) do set "num=!num:%%i= %%i !"
  7.    for %%i in (!num!) do if defined .%%i set "str=!str!%%i"
  8.    if defined str echo ren "%%a" "!str!%%~xa"
  9. )
  10. pause
复制代码

[ 本帖最后由 随风 于 2009-3-14 17:32 编辑 ]
技术问题请到论坛发帖求助!

TOP

格式具体是带有特有特殊符号的.如☆ 汉字.最后是字母.

☆☆这是一个电影名称01.rm 就是这么样的格式.全部名称都是这样的.

TOP

  如果要写一个通用代码,估计够呛。最好的办法是针对具体应用,尽可能地利用现有条件编写代码,则难度大为降低。而代码最终编成什么模样,是和数据格式密切相关的,所以,楼主应该提供尽可能多的数据信息,比如:文件名的组成规律是什么?是不是只有汉字和数字(看你的标题描述应该如此,但是最好能确认一下)?汉字和数字是混杂的还是各自连成一串?仅凭顶楼的一个举例,远远无法窥知全貌,楼主应该用文字详细加以说明。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

多谢各位!我明天上班就来测试。

本来想自己写了一个程序来的。苦于刚刚玩。NET程序不足一个月。着实写不出。

另外也不会有重复的。因为都是电影。格式如下

士兵突击(此为文件夹)\士兵突击01.rm
士兵突击(此为文件夹)\士兵突击02.rm
士兵突击(此为文件夹)\士兵突击03.rm

[ 本帖最后由 luo0527 于 2009-3-12 21:15 编辑 ]

TOP

  1. @echo off
  2. ::RM格式电影重命名演示程序
  3. ::只保留文件名中的数字(不考虑数字重复的情况)和后缀名
  4. ::如何演示结果无误,把ren前面的echo去掉,即可实现真正重命名。
  5. setlocal enabledelayedexpansion
  6. set FilmFolder=C:\test
  7. for /f "delims=" %%a in ('dir /s /b %FilmFolder%\*.rm') do (
  8.   call :NumFilter %%~na
  9.   if "!num!" neq "" (
  10.     echo ren "%%a" !num!%%~xa
  11.   )
  12. )
  13. pause
  14. goto :eof
  15. :NumFilter
  16. set "str=%1"
  17. set num=
  18. :LoopFilter
  19. set char=%str:~0,1%
  20. if %char% geq 0 (
  21.   if %char% leq 9 (
  22.     set num=!num!%char%
  23.   )
  24. )
  25. set str=%str:~1%
  26. if "%str%" neq "" (
  27.   goto :LoopFilter
  28. ) else (
  29.   goto :eof
  30. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. ::文件都是如LZ所说一样的格式列在test.txt中
  3. for /f %%i in (test.txt) do call :aa %%~ni                 
  4. pause::[提示按任意键结束...]
  5. :aa
  6. set str=
  7. set "str=%1"
  8. :kaishi
  9. echo %str:~0,1%|findstr "^[0-9]*$">nul || (set str=%str:~1%&goto kaishi)
  10. echo %str%.rm>>test2.txt
  11. goto :eof
复制代码

TOP

  批处理擅长的就是对文件名进行操作,楼主最好描述一下文件名的规律,比如:所有的rm文件中,文件名是不是只有汉字和数字?若有其他字符,有没有什么分隔标志?否则,代码不好写。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表