Board logo

标题: [文件操作] 批处理如何提取文件名中指定位数的数字字符串来重命名文件 [打印本页]

作者: 我是一只小小鸟    时间: 2018-4-16 17:25     标题: 批处理如何提取文件名中指定位数的数字字符串来重命名文件

修改文件名,只留8位数字

我有一系列的文件名,他其中都有一个八位数的数字。比方说


��ʱ��֮��  �Ϻ�������չ30��ع�չ_12216904

2008年上海市少年儿童唐诗宋词经典吟诵选本_12183905

12181200_2008中国动漫产业发展报告_

可以帮我写一个脚本,把这8位数外的,其他字符都删除,只留下8位数做为文件名吗
作者: yhcfsr    时间: 2018-4-16 18:24

本帖最后由 yhcfsr 于 2018-4-16 18:26 编辑
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/s/b^|findstr "[0-9]"') do (
  3. call :get_num "%%~na" name
  4. setlocal enabledelayedexpansion
  5. ren "%%a" "!name!%%~xa"
  6. endlocal
  7. )
  8. pause&exit
  9. :get_num
  10. setlocal&set "name=%~1"
  11. :lp
  12. set "ch=%name:~,1%"
  13. rem 取一字,如果是数字,截8字:如果全数字就输出,否则继续逐字扫描
  14. echo;"%ch%"|findstr "[0-9]">nul&&(
  15. echo;%name:~,8%|findstr "^[0-9]*$">nul&&(endlocal&set "%2=%name:~,8%"&goto :eof)
  16. )
  17. set "name=%name:~1%"
  18. if "%name%"=="" endlocal&goto :eof
  19. goto :lp
复制代码
效率是没有的,同名判别是没做的(太简单懒得写)。所以祈祷你的8位数没有重复吧。
作者: 我是一只小小鸟    时间: 2018-4-16 18:39

回复 2# yhcfsr


    这个解决了我的问题,不过我有个问题,rem 取一字,如果是数字,截8字:如果全数字就输出,否则继续逐字扫描[/color   这些是什么意思呢,这个是选择我要输出的字数吗,
作者: yhcfsr    时间: 2018-4-16 18:44

本帖最后由 yhcfsr 于 2018-4-16 18:46 编辑

回复 3# 我是一只小小鸟
这个只是注释,没有任何作用,BAT不会执行。要不是好看,你删除就行。
作者: 我是一只小小鸟    时间: 2018-4-16 18:46

回复 4# yhcfsr


    好的,非常感谢
作者: 我是一只小小鸟    时间: 2018-4-23 14:19

回复 2# yhcfsr


    你好,之前你的代码,可以正常使用,不过这两天,发现了一个问题。请看下图

�2ݼ�����_12254494.rar     
�2ݼ����μ�_12254500.rar


类似上面这种批处理显示  系统找不到指定文件夹,
这个可以帮我看一下,应该怎么解决吗
作者: yhcfsr    时间: 2018-4-23 19:11

回复 6# 我是一只小小鸟


    加我QQ 33892006
作者: WHY    时间: 2018-4-25 09:52

  1. PowerShell "dir *.rar | ?{$_.Name -match '\d{8}'} | ren -newName {$matches[0]+'.rar'}"
复制代码

作者: 我是一只小小鸟    时间: 2018-4-25 11:01

回复 8# WHY


    非常感谢
作者: yeke    时间: 2020-4-25 23:20

回复 8# WHY


   PowerShell "dir *.rar | ?{$_.Name -match '\d{8}'} | ren -newName {$matches[0]+'.rar'}"
你好,能否帮修改下,其它名字不变,只修改指定位数,感谢了




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