Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash If else函数在.bat脚本中+;findstr命令_Bash_Batch File - Fatal编程技术网

Bash If else函数在.bat脚本中+;findstr命令

Bash If else函数在.bat脚本中+;findstr命令,bash,batch-file,Bash,Batch File,我想搜索一个在文件夹中的所有文本文件中搜索某些值的文件 如果找到包含我需要的信息的行,它会将该行写入文本域 如果未找到,它将只在该行中写入文件名和“N/A” 我知道这是错的,但我的编码技能很差,所以我不得不问 非常感谢您的回答根据您的“规范”工作的是: IF find tcp.client == 1 ( findstr tcp.client *_chkpackage.log>summary.txt ) ELSE ( #write only "filename" &

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

我知道这是错的,但我的编码技能很差,所以我不得不问


非常感谢您的回答

根据您的“规范”工作的是:

IF find tcp.client == 1 

(


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

ELSE 
(

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

)

请注意,
if errorlevel 1
表示“if errorlevel大于或等于1”,因此我交换了您的比较,因为即使errorlevel等于1,
if errorlevel 0
也是真的。

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

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

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

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

@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

您的成功输出缺少文件名前缀。另外,FINDSTR设置自己的errorlevel,因此不需要额外的FIND步骤。在成功案例中,没有请求文件名前缀。因此引入了额外的find来处理这些不同的输出情况:-)没有显式地请求它,但是操作代码在filespec中使用了带有通配符的FINDSTR,这导致在每个匹配行前面都加上了文件名前缀。我很确定OP会保留这个功能。您删除了通配符,该通配符将从输出中删除名称前缀。请查看解决此问题的简明方法:)@eathapeking-如果您收到一篇完全回答您的问题并满足您的需要的好帖子,那么您应该通过单击左上角附近的复选标记来接受它。这个动作让其他人知道问题已经得到了回答,它会给你2分,给回答者15分。每个问题只能接受一个答案。一旦你达到15个代表点,你就有权对任何你认为有用的答案进行投票,包括对其他人问题的答案。向上投票给答题海报10分。是的,我做到了:)但是为什么只有1张支票才能得到最好的答案?每个人的答案都不应该得到分数
@echo off
>summary.txt (
  for %%F in (*_chkpackage.log) do findstr /l "tcp.client" "%%F" nul||echo %%F N/A
)