标题: [文件操作] 比较复杂的逻辑查询功能历史数据几万bat能胜任吗 [打印本页]
作者: iii888iii 时间: 2022-4-17 14:00 标题: 比较复杂的逻辑查询功能历史数据几万bat能胜任吗
本帖最后由 iii888iii 于 2022-4-19 13:01 编辑
链接:https://pan.baidu.com/s/12hzJxNJWE8xZUA2eUZXnUg
提取码:z8ro
该查询逻辑稍微复杂,目标数据有大几万.不知道bat能否胜任. 容我详细说来,感谢大家.
=========================================
顶层文件夹:
里面有 n个文件夹(名称不确定).
查询:
1,提取"需要查询的目标"的目录结构(不包括文件,仅子目录的名称).
案例提取得到:
a1_=zpk=_6-4-1
a_=zpk=_1-2-0
转换为最大值,次大值模式(a_=zpk=_2-2-0 这种理解为,a_=zpk=_最大-最大-最小)
a1_=zpk=_最大-次大-最小
a_=zpk=_次大-最大-最小
注明:a1,a 理解为一个目录名称,右边指数参数.
------------------------------------
查找: 顶层文件夹o被查询的历史目录(目录数据有几万个)
提取
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
目录里面的,
所有子目录的,最大值,次大值模式.(a_=zpk=_2-2-0 这种理解为,a_=zpk=_最大-最大-最小)
类比: 例如:a1_=zpk= 4-2-1 和 a1_=zpk= 7-2-1 和 a1_=zpk= 9-3-1 都属于完全匹配.
输出a,完全匹配(目录名称一直),则输出(案例的eeeeee是完全匹配,复制eeeeee文件夹根目录的匹配案例.xlsx
到"结论输出"文件夹,覆盖.)
输出b,包含相同目录,结构一致,输出( 注 : )到"结论包含" 如果目录:除了有 例如:a1_=zpk= 4-2-1 和 b1_=zpk= 7-2-1 和 c1_=zpk= 9-3-1 (如果查询a1_=zpk= 6-2-1,那么这个目录a1_=zpk= 4-2-1 属于包含)
目录aaaaaa,为包含案例.
(注b:输出的意思,就是复制,aaaaaa根目录的一个.xlsx文件到"结论包含"这个目录)
补充说明一下,匹配的含义:
1,首先,获取的文件夹名称, :a1_=zpk= 4-2-1 这个文件夹的意思是a1 的指数 等于 4,2,1 特征为: 最大值=4 次大=2 最小值=1 如果"历史文件" 有:a1_=zpk= 5-3-1 或者 a1_=zpk= 5-1-0 视为匹配成功
2,如果, 查询得到的结论 只有a1这个文件夹,, 查询也是只有这个文件夹a1,那么就是完全匹配
3,如果,查询得到的结论中除了a1这个文件夹,,还包含其他文件夹,,则理解为,包含匹配,
不知道我说清了没有.
作者: went 时间: 2022-4-17 20:53
貌似用不到参数,直接比较文件夹名- @echo off & cd /d "%~dp0"
- setlocal enabledelayedexpansion
- REM 读取目标
- set "index=0"
- for /d %%i in ("需要查询的目标\*") do (
- set /a "index+=1"
- set "_tag_!index!=%%~nxi"
- )
- REM 查询历史
- for /d %%i in ("顶层文件夹o被查询的历史目录\*") do (
- echo %%i
- set /a "a=0,b=0"
- for /d %%a in ("%%i\*") do set /a "a+=1"
- for /l %%a in (1,1,%index%) do if exist "%%i\!_tag_%%a!" set /a "b+=1"
- if "!b!"=="!index!" (
- if "!a!"=="!index!" (
- echo 完全匹配
- copy /y "%%i\*.xlsx" "结论输出" | findstr "已复制"
- ) else (
- echo 包含案例
- copy /y "%%i\*.xlsx" "结论包含" | findstr "已复制"
- )
- ) else echo 不匹配
- echo -----------------
- )
- pause&exit
复制代码
作者: iii888iii 时间: 2022-4-17 22:02
回复 2# went
这代码简洁真意外啊....感谢这位朋友,案例测试通过,后面看看大量的行不行.
作者: iii888iii 时间: 2022-4-17 22:25
本帖最后由 iii888iii 于 2022-4-17 22:26 编辑
回复 2# went
完全匹配是指: 同一个a文件夹+右边指数结果(最大,次大,最小).这种比较,不是文件夹,完全一致.
例如:a1_=zpk= 4-2-1 和 a1_=zpk= 7-2-1 和 a1_=zpk= 9-3-1 都属于完全匹配.
作者: went 时间: 2022-4-18 22:12
回复 4# iii888iii
看不懂你的逻辑
作者: iii888iii 时间: 2022-4-19 01:33
回复 5# went
嗯,已经补充说明了一下. 就是每个文件夹,都要拆出 zpk的指数,,判断出,大 ,中小,然后比较,这个 特征.请看补充说明.
作者: iii888iii 时间: 2022-4-20 16:23
顶一下........
作者: went 时间: 2022-4-21 12:32
- @echo off & cd /d "%~dp0"
- setlocal enabledelayedexpansion
- REM 读取目标
- set "index=0"
- for /f "delims=_" %%i in ('dir /b /ad "需要查询的目标\*"') do (
- set /a "index+=1"
- set "_tag_!index!=%%~i"
- )
- REM 查询历史
- for /d %%i in ("顶层文件夹o被查询的历史目录\*") do (
- echo %%i
- set /a "a=0,b=0"
- for /d %%a in ("%%i\*") do set /a "a+=1"
- for /l %%a in (1,1,%index%) do dir /b /ad "%%i" | findstr /b /i /c:"!_tag_%%a!" >nul 2>nul && set /a "b+=1"
- if "!b!"=="!index!" (
- if "!a!"=="!index!" (
- echo 完全匹配
- copy /y "%%i\*.xlsx" "结论输出" | findstr "已复制"
- ) else (
- echo 包含案例
- copy /y "%%i\*.xlsx" "结论包含" | findstr "已复制"
- )
- ) else echo 不匹配
- echo -----------------
- )
- pause&exit
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |