3
我做了一段批处理代码,我认为这会起作用。我在想这个代码在做什么?我有一些插件,我想测试部署是否正确。所以我从plugins.txt获取插件。然后我用java语句从SVN获得插件。我部署插件并在test1.txt中获得反馈。然后,我在该文件中执行findStr并搜索“BUILD SUCCESSFUL”,如果它存在,我想添加句子Build Gelukt,如果失败,我想添加Build Fout。但是我总是得到Build Gelukt的答案,正如你在图像中看到的那样,他会发回构建失败。FindStr不能正常工作
这段代码有什么问题?
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
)
Btw。对于更简单的回显html代码,您可以使用[消失的引号技术](http://stackoverflow.com/a/7308647/463115)。就像'echo!“=!
@jeb that does not work for me = O I still get the!”!的!在html文件中。 – Gynnad 2012-03-23 09:26:03
好吧,我忘了提及,你需要使用'setlocal EnableDelayedExpansion'启用延迟扩展。 – jeb 2012-03-23 09:31:21
回答
经典批次问题 - 您正在设置您的ERRORLEVEL并试图在
DO()
子句中使用%ERRORLEVEL%
来访问它。%VAR%
扩展发生在解析时间,并且整个FOR ... DO()
语句被解析一次,所以您在语句执行之前看到ERRORLEVEL的值。显然这是行不通的。jeb暗指他评论中有关消失报价的答案。如果您的
setlocal enableDelayedExpansion
在顶部,则问题将得到解决,然后使用!ERRORLEVEL!
而不是%ERRORLEVEL%
。另外,GregHNZ的正确之处在于,您的FINDSTR语句后应立即进行ERRORLEVEL测试。还有其他的方法来处理括号内ERRORLEVEL不需要延迟扩展:
下面的测试,如果ERRORLEVEL大于或等于1
及以下条件执行命令基于先前命令的结果
来源
2012-03-23 11:32:30 dbenham
这对我有用!谢谢! :) – Gynnad 2012-03-23 12:19:17
的
%ErrorLevel%
变量仅适用于立即以前的命令。所以,当你这样做:
以您目前的代码,你得到上述
的
CD
命令的错误级别尝试FindStr
命令后,把你的if %ERRORLEVEL% ==1
立即行,然后之后做del和cd。很明显,你需要在你的echo语句中放入html文件的完整路径。来源
2012-03-23 08:27:48 GregHNZ
我改变了代码,现在把它设置在第一篇文章中..但它仍然不起作用。我也在测试findStr语句后立即测试了一个Echo%ERRORLEVEL%。但他总是将0放出去。虽然命令行中的文本表示它部署失败.. – Gynnad 2012-03-23 08:42:13
@GregHNZ:%ERRORLEVEL%没有提供CD命令的错误级别。它在FOR语句被解析之前给出值!但是你应该正确地认为错误级别测试应该在FINDSTR语句后立即发生。 – dbenham 2012-03-23 11:37:03
相关问题