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

[文本处理] 批处理怎样查找同一目录下不同文件名的文件【已解决】

[复制链接]
 楼主| 发表于 2014-12-3 10:30:54 | 显示全部楼层
回复 13# DAIC


        这个输出结果是正确的。感谢DAIC!
发表于 2014-12-3 10:58:24 | 显示全部楼层
回复 16# fish509008


    其它类型知道怎么写了吗
 楼主| 发表于 2014-12-3 11:05:22 | 显示全部楼层
回复 17# DAIC


    嗯 我自己先琢磨下...没思路了再请教你。
发表于 2014-12-3 12:00:37 | 显示全部楼层
回复 15# fish509008


    在do语句块里面直接用就是了,不用转义。我说如果是在for ... in ('') do() 的in条件里面,被作为执行语句分析结果的话,就需要转义一下了,当然不是绝对,还有些情况也可以直接用,比如被 ""包起来,然后usebackq……
 楼主| 发表于 2014-12-3 12:05:55 | 显示全部楼层
回复 17# DAIC
  1. @echo off
  2. REM 第一类
  3. echo 日期          时间        文件名>"CHECK_RESULT.txt"
  4. (for /l %%i in (1,1,10) do (
  5.     if exist AAAA_%%i.txt (
  6.         for /f %%j in ('type AAAA_%%i.txt ^| find /c "a"') do (
  7.             if %%j equ 0 (
  8.                 echo %date:~0,10%    %time:~0,8%    AAAA_%%i.txt
  9.             )
  10.         )
  11.     )
  12.     if exist CCCC_%%ia.txt (
  13.         for /f %%j in ('type CCCC_%%ia.txt ^| find /c "a"') do (
  14.             if %%j neq 8 (
  15.                 echo %date:~0,10%    %time:~0,8%    CCCC_%%ia.txt
  16.             )
  17.         )
  18.     )
  19.     if exist DDDD_%%ib.txt (
  20.         for /f %%j in ('type DDDD_%%ib.txt ^| find /c "a"') do (
  21.             if %%j neq 8 (
  22.                 echo %date:~0,10%    %time:~0,8%    DDDD_%%ib.txt
  23.             )
  24.         )
  25.     )
  26. ))>>CHECK_RESULT.txt
复制代码
ACD这三类统计现在都没问题了。感谢DIAC提供的帮助。
但是我在统计B文件名类型的文件时候,发现BBBB_*.TXT中的“a”行数并不确定,附件里有BBBB_*.TXT的源文件,第三列Service State的状态不是“in-service/”就要把文件名给统计出来的
麻烦DAIC兄再帮我看看啊
 楼主| 发表于 2014-12-3 12:23:43 | 显示全部楼层
回复 19# amwfjhh


        嗯 ,我大概明白了
谢谢啊
你帮我看看20楼的描述,附件里有具体文件,我开始不知道怎么计算那个不确定的行数了,现在发现思路有问题,我应该把第三部分“/”前的值是不是“in-service”来作为搜索条件,但是我不知道该怎么正确的获取第三部分,因为有的行没有那么多内容
发表于 2014-12-3 13:26:57 | 显示全部楼层
本帖最后由 amwfjhh 于 2014-12-3 13:27 编辑

回复 21# fish509008


    严格按照你说的来的话就是:

  1. (for /f "tokens=4 delims=/ " %%k in ('findstr /r "^[0-9]*/[0-9]*" BBBB_%%i.txt') do echo %%k)|findstr /iv "in-service" && echo BBBB_%%i.txt
复制代码
当然也可以在FOR中进行判断,有不符合的立即GOTO跳出,但即使这样,FOR所预留出来的执行周期也会遍历完,效率有点低。

稍微宽松点的判断可以直接从有效行中查找in-service

  1. findstr /r "^[0-9]*/[0-9]*" BBBB_%%i.txt|findstr /iv "in-service" && echo BBBB_%%i.txt
复制代码
再不负责点可以直接通篇查找不含in-service即可

  1. findstr /iv "in-service" BBBB_%%i.txt && echo BBBB_%%i.txt
复制代码
 楼主| 发表于 2014-12-3 14:08:41 | 显示全部楼层
本帖最后由 fish509008 于 2014-12-3 14:12 编辑

回复 22# amwfjhh


    通篇查找不包含"in-service"是不行的  因为有些行是类似表名的内容,里面肯定没有"in-service"'
我的思路是先skip跳过不用判断的行,然后tokens出第三列,然后在所有第三列里查找不包含"in-service"'的行,但是skip的值有点复杂啊,1,2,3,18,19,20,34,35,36... 也就是说3行表头,然后是14行需要查找的行,然后又是3行表头,不大于14行包含字符串的行...
直接tokens第三列,然后按照DAIC的方法统计是不是也能行啊,但是这中间嵌套了好几个for,我不知道该怎么写
 楼主| 发表于 2014-12-3 14:29:11 | 显示全部楼层
  1. @echo off
  2. echo 日期          时间        文件名>"CHECK_RESULT.txt"
  3. (for /l %%i in (1,1,200) do (
  4.     if exist BBBB_%%i.txt (
  5.         for /f %%j in ('for /f "tokens=3 delims= " %%k in ('type BBBB_%%i.txt') do echo %%k ^| find /c /v "in-service"') do (
  6.             if %%j gtr 0 (
  7.                 echo %date:~0,10%    %time:~0,8%    BBBB_%%i.txt
  8.             )
  9.         )
  10.     )
  11. ))>>CHECK_RESULT.txt
复制代码
这是我针对的类型的统计,目前还是没有达到预想的效果...
发表于 2014-12-3 15:38:23 | 显示全部楼层
  1. @echo off
  2. echo 日期          时间        文件名>"CHECK_RESULT.txt"
  3. (for /l %%i in (1,1,10) do (
  4.     REM 第一类
  5.     if exist AAAA_%%i.txt (
  6.         for /f %%j in ('type AAAA_%%i.txt ^| find /c "a"') do (
  7.             if %%j equ 0 (
  8.                 echo %date:~0,10%    %time:~0,8%    AAAA_%%i.txt
  9.             )
  10.         )
  11.     )
  12.     REM 第二类
  13.     if exist BBBB_%%i.txt (
  14.         for /f %%j in ('type BBBB_%%i.txt ^| find "/" ^| find /v /c "in-service"') do (
  15.             if %%j neq 0 (
  16.                 echo %date:~0,10%    %time:~0,8%    BBBB_%%i.txt
  17.             )
  18.         )
  19.     )
  20.     REM 第三类
  21.     if exist CCCC_%%ia.txt (
  22.         for /f %%j in ('type CCCC_%%ia.txt ^| find /c "a"') do (
  23.             if %%j neq 8 (
  24.                 echo %date:~0,10%    %time:~0,8%    CCCC_%%ia.txt
  25.             )
  26.         )
  27.     )
  28.     REM 第四类
  29.     if exist DDDD_%%ib.txt (
  30.         for /f %%j in ('type DDDD_%%ib.txt ^| find /c "a"') do (
  31.             if %%j neq 8 (
  32.                 echo %date:~0,10%    %time:~0,8%    DDDD_%%ib.txt
  33.             )
  34.         )
  35.     )
  36. ))>>CHECK_RESULT.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
fish509008 + 1 学习了!

查看全部评分

 楼主| 发表于 2014-12-3 16:18:14 | 显示全部楼层
回复 25# DAIC


    太感谢了!我怎么就没想着查找“/”呢
高手的大脑就是不一样啊

四个类型的都可以统计,感谢DAIC的热心帮助!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 13:37 , Processed in 0.021179 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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