如何使用批处理脚本遍历目录中的文件

时间:2014-04-28 12:27:14

标签: batch-file

我对批处理脚本比较陌生, 我需要一个循环遍历目录的脚本,该目录有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
)

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

然后,只有当三个条件评估为真时才会执行命令。