我写了一段批处理代码,我认为这会起作用。我在想这段代码在做什么?我有一些插件,我想测试部署是否正确。所以我从plugins.txt得到了插件链接。然后我用java语句从SVN获取插件。我部署了这个插件,并在test1.txt中获得反馈。然后,我在该文件中执行findStr并搜索“构建成功”,如果是,我想添加句子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
)

发布于 2012-03-23 19:32:31
典型的批处理问题-您正在设置ERRORLEVEL,并试图在同一个DO()子句中使用%ERRORLEVEL%来访问它。ERRORLEVEL扩展发生在解析时,整个FOR ... DO()语句只解析一次,所以在语句执行之前,您看到的是%VAR%的值。显然这是行不通的。
jeb在他关于消失的引用的评论中提到了答案。如果您在顶部使用setlocal enableDelayedExpansion,然后使用!ERRORLEVEL!而不是%ERRORLEVEL%,您的问题将会得到解决。此外,GregHNZ是正确的,因为ERRORLEVEL测试应该紧跟在您的FINDSTR语句之后。
还有其他方法可以在括号内处理ERRORLEVEL,而不需要延迟扩展:
以下测试ERRORLEVEL是否大于或等于1
IF ERRORLEVEL 1 (...) ELSE (...)并根据先前命令的结果有条件地执行命令
FindStr "SUCCESSFUL" test1.txt && (
commands to execute if FindStr succeeded
) || (
commands to execute if prior command failed.
)发布于 2012-03-23 16:27:49
%ErrorLevel%变量仅适用于上一个命令。
所以当你这样做的时候:
echo Errorlevel: %ERRORLEVEL%使用您当前的代码,您将获得上述CD命令的错误级别
尝试将if %ERRORLEVEL% ==1代码行直接放在FindStr命令之后,然后执行del和cd命令。显然,您需要将html文件的完整路径放在您的echo语句中。
https://stackoverflow.com/questions/9835783
复制相似问题