我对批处理脚本比较陌生, 我需要一个循环遍历目录的脚本,该目录有3个日志文件并检查错误和警告。我对循环位不太清楚。 我写了一个小代码..帮我纠正它......
for %%a IN ("C:\Program Files (x86)\<installloc>\*.log*")
do
findstr /c:"0 Warnings" %%a
set result1=%errorlevel%
findstr /c:"0 NonFatalErrors" %%a
set result2=%errorlevel%
findstr /c:"0 FatalErrors" %%a
set result3=%errorlevel%
done
if %result1% & %result2% & %result3% EQU 0
(
exit 0
) else (
exit 1
)
答案 0 :(得分:0)
这就是我认为你想要做的事情
for %%a IN ("C:\Program Files (x86)\<installloc>\*.log*") do (
for %%b in (Warnings NonFatalErrors FaltalErrors) do (
findstr /l /c:"0 %%b" "%%~fa"
if errorlevel 1 exit /b 1
)
)
exit /b 0
这将搜索文件夹中的所有文件以查找任何指示的字符串。如果找不到任何一个,则退出errorlevel 1.如果在所有文件中找到所有字符串,则退出errorlevel 0
如果您找到10 Warnings
(示例),则此代码将失败,因为找到了搜索的文本。必须根据实际文件内容更好地定义搜索字符串。或者,如果搜索文本位于行的开头,则可以将/b
添加到findstr
命令,以指示匹配应发生在行的开头。
在原始代码中存在一些问题:
在批处理文件中,for
命令(for ... in (set)
)中的集合的右括号必须与do
关键字和{中{1}}关键字的行相同。 {1}}命令(如果有多个)必须括在括号中,这样解析器就可以知道哪些行要重复。此块的左括号必须与for
关键字相同。
此外,批do
命令中没有AND
运算符。如果你想保留原始的sintax,它应该写成
if
然后,只有当三个条件评估为真时才会执行命令。