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

[文本处理] 【已解决】批处理用文件名中的数组查找缺失的文件编号

[复制链接]
发表于 2024-8-9 11:02:12 | 显示全部楼层 |阅读模式
文件夹内有大批的文件,比如一共500个,命名方式是:
AAAA-BBBB-BD0001-AAASDQW
AAAA-BBBB-BD0002-ASDQWEA
AAAA-BBBB-BD0003-ASDAASD
AAAA-BBBB-BD0005-TFHTRYH
AAAA-BBBB-BD0007-FGHJFGHJ
AAAA-BBBB-BD0008-ASDQWE
……
AAAA-BBBB-BD0100-QWEQWE

类似这样,比如上面缺少了 BD0004/BD0006这个编号,怎么能快速查找缺少的这个呢

我现在的想法是用代码数字生成一个BD0001-BD0500的名称写入到一个TXT里面
然后查找文件名和生成的TXT对比
后面这个步骤不知道怎么写 感谢各位分享

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-8-9 11:45:35 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=3 delims=-" %%i in ('dir /b /a-d *-*-*-*.*') do (
  3.     for /f "tokens=* delims=BD0" %%j in ("%%i") do set n=%%j
  4. )
  5. setlocal enabledelayedexpansion
  6. for /l %%i in (1,1,%n%) do (
  7.     set m=000%%i
  8.     set m=!m:~-4!
  9.     if not exist "*-*-BD!m!-*.*" echo,BD!m!
  10. )
  11. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-8-9 12:09:24 | 显示全部楼层
回复 2# qixiaobin0715


    可以,没问题
感谢,也看懂了
发表于 2024-8-9 13:44:37 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-8-9 14:29 编辑

回复 1# qq629926132

给一个再简化的版本,有赖于楼主定义的文件名命名格式...
被检查的文件名编号区间 m-n 可自定义,代码第三行中假定=1-500,运行结果会屏显出检查区间中未被匹配成功的编号如 BD0004

  1. @echo off &setlocal enabledelayedexpansion
  2. for /f "tokens=3 delims=-" %%a in (' dir /b/a-d "*-BD????-*" ') do (set "%%a=1")
  3. for /l %%n in (1,1,500) do (set "k=000%%n" &if not defined BD!k:~-4! echo,BD!k:~-4!)
  4. endlocal&pause&exit/b
复制代码
发表于 2024-8-9 14:32:30 | 显示全部楼层
如果给定区间的话,还用得着像2楼那么费事。
2楼代码删除2~4行,将第6行的“%n%”改为实际数字比如500即可,这样就不需要预设那么多变量,效率要高一些。
发表于 2024-8-9 17:23:04 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. rem 定义开头,s=1;不定义则删除下一行
  4. set s=1
  5. setlocal enabledelayedexpansion
  6. for /f "tokens=3 delims=-" %%i in ('dir /b /a-d *-*-*-*.* ^|find /v "%~nx0"') do (
  7.         for /f "tokens=* delims=BD0" %%a in ("%%i") do (
  8.                 if !s! neq %%a (
  9.                         set /a e=%%a-1
  10.                         for /l %%l in (!s! 1 !e!) do (
  11.                                 set str=0000000%%l
  12.                                 echo BD!str:~-4!
  13.                         )
  14.                 )
  15.                 set /a s=%%a+1
  16.         )
  17. )
  18. endlocal
  19. pause
复制代码
发表于 2024-8-13 09:03:46 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-8-13 10:06 编辑

拿这个主题练练手。
如果连续编号不是从1开始,起始编号与终止编号未知(BD????-BD????),我就是要查找起始编号与终止编号之间的缺失编号,可以这样:
  1. @echo off
  2. set x=9999
  3. set y=0
  4. setlocal enabledelayedexpansion
  5. for /f "tokens=3 delims=-" %%i in ('dir /b /a-d *-*-*-*.*') do (
  6.     for /f "tokens=* delims=BD0" %%j in ("%%i") do (
  7.         if %%j lss !x! set x=%%j
  8.         if %%j gtr !y! set y=%%j
  9.     )
  10. )
  11. for /l %%i in (%x%,1,%y%) do (
  12.     set m=000%%i
  13.     set m=!m:~-4!
  14.     if not exist "*-*-BD!m!-*.*" echo,BD!m!
  15. )
  16. pause
复制代码
这样要通用一些,只要保持文件名第3段格式即可,即使第1、2段字符不一样得到的结果也正常。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 22:10 , Processed in 0.018911 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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