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

[文件操作] 比较复杂的逻辑查询功能历史数据几万bat能胜任吗

[复制链接]
发表于 2022-4-17 14:00:07 | 显示全部楼层 |阅读模式
本帖最后由 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这个文件夹,,还包含其他文件夹,,则理解为,包含匹配,

不知道我说清了没有.
发表于 2022-4-17 20:53:59 | 显示全部楼层
貌似用不到参数,直接比较文件夹名
  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技术 +1 收起 理由
iii888iii + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-4-17 22:02:52 | 显示全部楼层
回复 2# went


    这代码简洁真意外啊....感谢这位朋友,案例测试通过,后面看看大量的行不行.
 楼主| 发表于 2022-4-17 22:25:32 | 显示全部楼层
本帖最后由 iii888iii 于 2022-4-17 22:26 编辑

回复 2# went


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

例如:a1_=zpk= 4-2-1        和   a1_=zpk= 7-2-1       和   a1_=zpk= 9-3-1    都属于完全匹配.
发表于 2022-4-18 22:12:56 | 显示全部楼层
回复 4# iii888iii


    看不懂你的逻辑
 楼主| 发表于 2022-4-19 01:33:52 | 显示全部楼层
回复 5# went


   嗯,已经补充说明了一下.    就是每个文件夹,都要拆出   zpk的指数,,判断出,大 ,中小,然后比较,这个  特征.请看补充说明.
 楼主| 发表于 2022-4-20 16:23:17 | 显示全部楼层
顶一下........
发表于 2022-4-21 12:32:36 | 显示全部楼层
  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 03:08 , Processed in 0.021258 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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