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

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

本帖最后由 fish509008 于 2014-12-3 16:25 编辑

有时间的大神帮看看怎么实现下面的文件查找啊。
同一目录下有四类文件名,分别为AAAA_*.TXT,BBBB_*.TXT,CCCC_*A.TXT,DDDD_*B.TXT  文件名我是泛指,4个类型的文件名间没有关联。
AAAA_1.TXT文件内容如下,相类似的为AAAA_2.TXT、AAAA_3.TXT...AAAA_100.TXT        需要统计不包含a的文件名
...
a
...
AAAA_1.TXT文件内容如下,相类似的为AAAA_2.TXT、AAAA_3.TXT...AAAA_100.TXT        需要统计含a的行,如果行数不等于X则打印文件名
...
a
b
a
c
...
CCCC_1A.TXT文件内容如下,相类似的为CCCC_2A.TXT、CCCC_3A.TXT...CCCC_100A.TXT         需要统计含a的行,如果行数不等于X则打印文件名
...
a
b
a
c
...
DDDD_1B.TXT文件内容如下,相类似的为DDDD_2B.TXT、DDDD_3B.TXT...DDDD_100B.TXT         需要统计含a的行,如果行数不等于X则打印文件名
...
a
b
a
c
...

目前我只进行到第一个类型的统计
代码如下:
@echo off &color 0a &setlocal enabledelayedexpansion
pushd "%cd%"
title FILE-CHECK
if not exist "%CHECK_RESULT.txt" (echo.日期            时间       文件名)>"CHECK_RESULT.txt"
find /v "in-service" AAAA_1.txt (echo.%date:~0,10%  %time:~0,8%   "AAAA_1.txt")>>"%CHECK_RESULT.txt"

一个文件查找都失败,所以想请教下高手们

TOP

最后一行的语法是错误的,改成这样试试:
  1. find /v "in-service" AAAA_1.txt && echo %date:~0,10%  %time:~0,8%   "AAAA_1.txt">>"CHECK_RESULT.txt"
复制代码

TOP

回复 3# DAIC
  1. find /v "a" AAAA_1.txt && echo %date:~0,10%  %time:~0,8%   AAAA_1.txt>>CHECK_RESULT.txt
复制代码
我试了下  为啥明明里面有要搜索的字符串“a”  还是会把文件名给打印出来啊?

TOP

  1. @echo off &color 0a &setlocal enabledelayedexpansion
  2. pushd "%cd%"
  3. REM 设置变量
  4. title PBX-CHECK
  5. REM 检查link资源使用情况统计文件
  6. if not exist "%CHECK_RESULT.txt" (echo.日期     时间       文件名)>CHECK_RESULT.txt
  7. for /l %%i in (1,1,10) do (find /v "a" AAAA_%%i.txt && echo %date:~0,10%  %time:~0,8%   AAAA_%%i.txt>>CHECK_RESULT.txt)
  8. pause
复制代码
这是我新写的第一个类型输出统计代码。
输出结果与预想不符。AAAA_%%i.txt中不管有没有“a”,最后都把AAAA_%%i.txt输出到CHECK_RESULT.txt中了
求大神指教下!!!

TOP

试下 finedstr  /m 参数

TOP

用重定向符"<"来给find传参,find认为来自于流的内容,就可以不打印出文件名。

TOP

感觉LZ好像要这样:
  1. @echo off
  2. set "x=2"
  3. for /f "tokens=*delims=- " %%a in ('find /c "a" *.txt') do (
  4.         for /f "tokens=1,2 delims=:" %%b in ("%%a") do (
  5.                 if "%%c" NEQ " %x%" echo,%%b
  6.         )
  7. )
  8. pause
复制代码
1

评分人数

TOP

回复 7# amwfjhh


    这个参数具体加在代码的什么位置啊?

TOP

回复 8# apang


    有点看不明白您的代码,我一共要统计出四类有问题的文件名,文件名中的*是数字,目前最多到40,以后可能还会增加的
第一类是AAAA_*.TXT,如果哪个文件里面不包含“1”,则输出此文件名
第二类是BBBB_*.TXT,如果哪个文件里含“2”行数小于10,则输出文件名
第三类是CCCC_*a.TXT,如果哪个文件里含“3”行数小于10,则输出文件名
第四类是DDDD_*b.TXT,如果哪个文件里含“3”行数小于10,则输出文件名

TOP

回复 9# fish509008


    以你的代码来说,改下这句:
  1. find /v "a" AAAA_%%i.txt
复制代码
  1. find /v "a"<AAAA_%%i.txt
复制代码
FOR条件语句里面注意转义<号。
1

评分人数

TOP

回复 11# amwfjhh
  1. @echo off &color 0a &setlocal enabledelayedexpansion
  2. pushd "%cd%"
  3. REM 设置变量
  4. title PBX-CHECK
  5. REM 检查link资源使用情况统计文件
  6. if not exist "%CHECK_RESULT.txt" (echo.日期            时间       文件名)>CHECK_RESULT.txt
  7. for /l %%i in (1,1,10) do (find /v "a"  ^<^AAAA_%%i.txt && echo %date:~0,10%  %time:~0,8%   AAAA_%%i.txt>>CHECK_RESULT.txt)
  8. pause
复制代码
加上<后 有“a”字符的没有打印输入了,但是没有“a”字符的文件名也没有输出啊....

TOP

  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. ))>>CHECK_RESULT.txt
复制代码
1

评分人数

TOP

回复 12# fish509008


    你先把''间的语句列出来单独执行一下看看。先确定这条语句能正确出结果,再加到FOR循环里面去。"<"的FOR条件转义只在"<"左边加转义符就行了。
楼上DAIC的代码与<类似,都是find从流中读取内容,类似的写法还有more AAA_%%i.txt | find /c "a"

TOP

回复 14# amwfjhh


    转义符^<我开始也试过了的,没有输出正确的结果。

TOP

返回列表