Bash If else函数在.bat脚本中+;findstr命令
我想搜索一个在文件夹中的所有文本文件中搜索某些值的文件 如果找到包含我需要的信息的行,它会将该行写入文本域 如果未找到,它将只在该行中写入文件名和“N/A” 我知道这是错的,但我的编码技能很差,所以我不得不问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" &
非常感谢您的回答根据您的“规范”工作的是:
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
)