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

[文件操作] 比较复杂的逻辑查询功能历史数据几万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这个文件夹,,还包含其他文件夹,,则理解为,包含匹配,

不知道我说清了没有.

貌似用不到参数,直接比较文件夹名
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. REM 读取目标
  4. set "index=0"
  5. for /d %%i in ("需要查询的目标\*") do (
  6. set /a "index+=1"
  7. set "_tag_!index!=%%~nxi"
  8. )
  9. REM 查询历史
  10. for /d %%i in ("顶层文件夹o被查询的历史目录\*") do (
  11. echo %%i
  12. set /a "a=0,b=0"
  13. for /d %%a in ("%%i\*") do set /a "a+=1"
  14. for /l %%a in (1,1,%index%) do if exist "%%i\!_tag_%%a!" set /a "b+=1"
  15. if "!b!"=="!index!" (
  16. if "!a!"=="!index!" (
  17. echo 完全匹配
  18. copy /y "%%i\*.xlsx" "结论输出" | findstr "已复制"
  19. ) else (
  20. echo 包含案例
  21. copy /y "%%i\*.xlsx" "结论包含" | findstr "已复制"
  22. )
  23. ) else echo 不匹配
  24. echo -----------------
  25. )
  26. pause&exit
复制代码
1

评分人数

TOP

回复 2# went


    这代码简洁真意外啊....感谢这位朋友,案例测试通过,后面看看大量的行不行.

TOP

本帖最后由 iii888iii 于 2022-4-17 22:26 编辑

回复 2# went


    完全匹配是指:  同一个a文件夹+右边指数结果(最大,次大,最小).这种比较,不是文件夹,完全一致.

例如:a1_=zpk= 4-2-1        和   a1_=zpk= 7-2-1       和   a1_=zpk= 9-3-1    都属于完全匹配.

TOP

回复 4# iii888iii


    看不懂你的逻辑

TOP

回复 5# went


   嗯,已经补充说明了一下.    就是每个文件夹,都要拆出   zpk的指数,,判断出,大 ,中小,然后比较,这个  特征.请看补充说明.

TOP

顶一下........

TOP

  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. REM 读取目标
  4. set "index=0"
  5. for /f "delims=_" %%i in ('dir /b /ad "需要查询的目标\*"') do (
  6. set /a "index+=1"
  7. set "_tag_!index!=%%~i"
  8. )
  9. REM 查询历史
  10. for /d %%i in ("顶层文件夹o被查询的历史目录\*") do (
  11. echo %%i
  12. set /a "a=0,b=0"
  13. for /d %%a in ("%%i\*") do set /a "a+=1"
  14. 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"
  15. if "!b!"=="!index!" (
  16. if "!a!"=="!index!" (
  17. echo 完全匹配
  18. copy /y "%%i\*.xlsx" "结论输出" | findstr "已复制"
  19. ) else (
  20. echo 包含案例
  21. copy /y "%%i\*.xlsx" "结论包含" | findstr "已复制"
  22. )
  23. ) else echo 不匹配
  24. echo -----------------
  25. )
  26. pause&exit
复制代码

TOP

返回列表