查找字符串(FindStr)无法正确工作。

3
我写了一段批处理代码,认为它会起作用。我的想法是这段代码在做什么?我有一些插件,想要测试是否正确部署。因此,我从plugins.txt中获取插件链接。然后用Java句子从SVN中获取插件。我部署插件并在test1.txt中获取反馈。然后我在该文件中进行findStr操作,并搜索“BUILD SUCCESSFUL”,如果成功则添加“Build Gelukt”一句,如果失败则添加“Build Fout”。但我始终得到答案“Build Gelukt”,而正如您可以看到的图片所示,他返回的是构建失败。
这段代码有什么问题吗?
for /f "tokens=* delims= " %%a in (plugins.txt) do (
echo %%a
cd "C:\dotCMS Automatic Install"
java -cp .;"C:\dotCMS Automatic Install\svnkit.jar" Test %%a
cd %dotcms_home%
call ant deploy-plugins > test1.txt
FindStr "SUCCESSFUL" test1.txt
if %ERRORLEVEL% ==1 (echo ^<tr BGCOLOR=\"#FFFFFF\"^>^<td^>%%a^</td^>^<td^>Build Fout^</td^>^</tr^> >> C:\dotCMSResults\goedje.html ) else (echo ^<tr BGCOLOR=\"#00FF00\"^>^<td^>%%a^</td^>^<td^>Build Gelukt^</td^>^</tr^> >> C:\dotCMSResults\goedje.html) 
del test1.txt
rem call ant undeploy-plugins >> test.txt
)

enter image description here


顺便提一下,为了更简单地回显HTML代码,您可以使用“消失的引号技术”。例如 echo !"=! <tr BGCOLOR=\"#FFFFFF\"><td>%%a</td><td>Bu... - jeb
@jeb 那对我不起作用 =O 我仍然在HTML文件中得到了 "!" 的 "!". - Danny Gloudemans
好的,我忘了提到你需要在之前启用延迟扩展,使用 setlocal EnableDelayedExpansion - jeb
2个回答

14
经典的批处理问题——在相同的DO()子句中设置了错误级别(ERRORLEVEL)并尝试使用%ERRORLEVEL%访问它。%VAR%扩展发生在解析时,整个FOR...DO()语句被解析一次,所以你看到的是该语句执行前ERRORLEVEL的值。很明显这样不行。
jeb在他的评论中提到了消失的引号的答案。如果您在顶部setlocal enableDelayedExpansion,然后使用!ERRORLEVEL!而不是%ERRORLEVEL%,则可以解决您的问题。此外,GregHNZ正确指出,应该在FINDSTR语句之后立即进行ERRORLEVEL测试。
还有其他处理圆括号内ERRORLEVEL的方法,不需要延迟扩展:
以下内容测试ERRORLEVEL是否大于或等于1。
IF ERRORLEVEL 1 (...) ELSE (...)

以下条件根据先前命令的结果执行命令

FindStr "SUCCESSFUL" test1.txt && (
  commands to execute if FindStr succeeded
) || (
  commands to execute if prior command failed.
)

2
%ErrorLevel%变量仅适用于上一个命令。因此,当您执行以下操作时:
echo Errorlevel: %ERRORLEVEL%

通过你当前的代码,你得到了上面CD命令的错误级别。

尝试在FindStr命令之后立即放置if %ERRORLEVEL% ==1行,然后再进行删除和更换目录。显然,在echo语句中需要放置html文件的完整路径。


我修改了代码,并将其设置在第一篇帖子中。但它仍然无法正常工作。我还进行了测试,只是在findStr语句之后立即执行了Echo %ERRORLEVEL%。但它总是输出0。而命令行中的文本却显示部署失败。 - Danny Gloudemans
@GregHNZ: %ERRORLEVEL%并没有给出CD命令的错误级别。它给出的是在FOR语句解析之前的值!但你说得对,错误级别测试应该紧接着FINDSTR语句之后进行。 - dbenham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接