2012-12-03 61 views
2
IF find tcp.client == 1 

(


findstr tcp.client *_chkpackage.log>summary.txt 
) 

ELSE 
(

#write only "filename" & "N/A" >> summary.txt 

) 

我想搜索,搜索某个值中的所有文本文件夹 如果发现含有信息的行我需要它会写该行到文件文字FIEL 如果找不到就只写文件名和“N/A”到如果蝙蝠脚本+ FINDSTR命令其他功能

我知道错了行了,但我的编码技能吸吮,所以我不得不问

非常感谢你的答案

回答

2

我假设点是一个点,而不是一个正则表达式通配符,在这种情况下,你需要告诉FINDSTR做文字搜索。

FINDSTR返回成功,如果找到,如果没有找到错误。如果先前的命令失败,则||运算符有条件地执行命令。

使用循环单独获得每个文件,并添加一个额外的文件(NUL),将不会匹配以迫使输出包含文件名。

附上整个构建括号和重定向整个块

@echo off 
>summary.txt (
    for %%F in (*_chkpackage.log) do findstr /l "tcp.client" "%%F" nul||echo %%F N/A 
) 
+0

谢谢你的代码,非常非常感谢解释:D – eathapeking

+1

@eathapeking - 如果你得到一个好的帖子,完全回答你的问题,并满足你的需求,那么你应该通过点击左上角附近的复选标记来接受它。该行动让其他人知道问题已得到解答,它会向您颁发2个重要点数,并将答案海报授予15分。每个问题只能接受一个答案。一旦你达到15个重点,你就有权投票选出任何有用的答案,包括对其他人问题的答案。一个投票可以给答案海报10分。 – dbenham

+0

是的,我做到了,但为什么它必须只有1检查最佳答案T^T 每个人都应该得到答案的标记 – eathapeking

2

工作的东西根据你的“规格” S将是一个:

@echo off 
if exist summary.txt del summary.txt 
for %%f in (*_chkpackage.log) do (
    find "tcp.client" %%f>NUL: 
    IF errorlevel 1 (
    echo %%f N/A >> summary.txt 
) ELSE (
    findstr "tcp.client" %%f >> summary.txt 
) 
) 
type summary.txt 

注意,if errorlevel 1的意思是“如果错误级别大于或等于1”,对于我换你的比较,因为if errorlevel 0是真实的,即使当错误级别等于1 。

+0

您的成功输出缺少文件名前缀。另外,FINDSTR设置自己的错误级别,所以不需要额外的FIND步骤。 – dbenham

+0

嗯。在成功案例中,没有请求文件名前缀。因此,额外的查找被引入来处理这些不同的输出情况:-) – pbhd

+0

它没有明确要求,但OP代码在filespec中使用FINDSTR和通配符,这导致文件名被加到每个匹配行的前面。我很确定OP希望保持这种功能。您删除了通配符,从输出中删除名称前缀。 – dbenham