标题: [文本处理] 【已解决】批处理用文件名中的数组查找缺失的文件编号 [打印本页]
作者: qq629926132 时间: 2024-8-9 11:02 标题: 【已解决】批处理用文件名中的数组查找缺失的文件编号
文件夹内有大批的文件,比如一共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对比
后面这个步骤不知道怎么写 感谢各位分享
作者: qixiaobin0715 时间: 2024-8-9 11:45
- @echo off
- for /f "tokens=3 delims=-" %%i in ('dir /b /a-d *-*-*-*.*') do (
- for /f "tokens=* delims=BD0" %%j in ("%%i") do set n=%%j
- )
- setlocal enabledelayedexpansion
- for /l %%i in (1,1,%n%) do (
- set m=000%%i
- set m=!m:~-4!
- if not exist "*-*-BD!m!-*.*" echo,BD!m!
- )
- pause
复制代码
作者: qq629926132 时间: 2024-8-9 12:09
回复 2# qixiaobin0715
可以,没问题
感谢,也看懂了
作者: aloha20200628 时间: 2024-8-9 13:44
本帖最后由 aloha20200628 于 2024-8-9 14:29 编辑
回复 1# qq629926132
给一个再简化的版本,有赖于楼主定义的文件名命名格式...
被检查的文件名编号区间 m-n 可自定义,代码第三行中假定=1-500,运行结果会屏显出检查区间中未被匹配成功的编号如 BD0004
- @echo off &setlocal enabledelayedexpansion
- for /f "tokens=3 delims=-" %%a in (' dir /b/a-d "*-BD????-*" ') do (set "%%a=1")
- for /l %%n in (1,1,500) do (set "k=000%%n" &if not defined BD!k:~-4! echo,BD!k:~-4!)
- endlocal&pause&exit/b
复制代码
作者: qixiaobin0715 时间: 2024-8-9 14:32
如果给定区间的话,还用得着像2楼那么费事。
2楼代码删除2~4行,将第6行的“%n%”改为实际数字比如500即可,这样就不需要预设那么多变量,效率要高一些。
作者: 77七 时间: 2024-8-9 17:23
- @echo off
- cd /d "%~dp0"
- rem 定义开头,s=1;不定义则删除下一行
- set s=1
- setlocal enabledelayedexpansion
- for /f "tokens=3 delims=-" %%i in ('dir /b /a-d *-*-*-*.* ^|find /v "%~nx0"') do (
- for /f "tokens=* delims=BD0" %%a in ("%%i") do (
- if !s! neq %%a (
- set /a e=%%a-1
- for /l %%l in (!s! 1 !e!) do (
- set str=0000000%%l
- echo BD!str:~-4!
- )
- )
- set /a s=%%a+1
- )
- )
- endlocal
- pause
复制代码
作者: qixiaobin0715 时间: 2024-8-13 09:03
本帖最后由 qixiaobin0715 于 2024-8-13 10:06 编辑
拿这个主题练练手。
如果连续编号不是从1开始,起始编号与终止编号未知(BD????-BD????),我就是要查找起始编号与终止编号之间的缺失编号,可以这样:- @echo off
- set x=9999
- set y=0
- setlocal enabledelayedexpansion
- for /f "tokens=3 delims=-" %%i in ('dir /b /a-d *-*-*-*.*') do (
- for /f "tokens=* delims=BD0" %%j in ("%%i") do (
- if %%j lss !x! set x=%%j
- if %%j gtr !y! set y=%%j
- )
- )
- for /l %%i in (%x%,1,%y%) do (
- set m=000%%i
- set m=!m:~-4!
- if not exist "*-*-BD!m!-*.*" echo,BD!m!
- )
- pause
复制代码
这样要通用一些,只要保持文件名第3段格式即可,即使第1、2段字符不一样得到的结果也正常。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |