if else函数在.bat脚本+ findstr命令中

时间:2012-12-03 07:49:44

标签: bash batch-file

IF find tcp.client == 1 

(


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

ELSE 
(

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

)

我想搜索在文件夹中的所有文本文件中搜索某些值的文件 如果找到包含我需要的信息的行,则将该行写入文本域 如果没有找到,它将只写文件名和“N / A”到行

我知道这是错的,但我的编码技巧很糟糕,所以我不得不问

非常感谢你的回答

2 个答案:

答案 0 :(得分:2)

根据你的“规范”工作的东西就是那个:

@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表示“如果errorlevel大于或等于1”,我交换了您的比较,因为即使errorlevel等于1,if errorlevel 0也为真。

答案 1 :(得分:2)

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

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

使用FOR循环单独获取每个文件,并添加一个永远不会匹配的附加文件(nul)以强制在输出中包含文件名。

将整个构造括在括号中并重定向整个块

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