首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FindStr不能正常工作

FindStr不能正常工作
EN

Stack Overflow用户
提问于 2012-03-23 16:02:02
回答 2查看 5.7K关注 0票数 3

我写了一段批处理代码,我认为这会起作用。我在想这段代码在做什么?我有一些插件,我想测试部署是否正确。所以我从plugins.txt得到了插件链接。然后我用java语句从SVN获取插件。我部署了这个插件,并在test1.txt中获得反馈。然后,我在该文件中执行findStr并搜索“构建成功”,如果是,我想添加句子Build Gelukt,如果失败,我想添加Build Fout。但我得到的答案总是Build Gelukt,而正如您在他发回的图像中看到的那样,构建失败了。

这段代码有什么问题?

代码语言:javascript
复制
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
)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-23 19:32:31

典型的批处理问题-您正在设置ERRORLEVEL,并试图在同一个DO()子句中使用%ERRORLEVEL%来访问它。ERRORLEVEL扩展发生在解析时,整个FOR ... DO()语句只解析一次,所以在语句执行之前,您看到的是%VAR%的值。显然这是行不通的。

jeb在他关于消失的引用的评论中提到了答案。如果您在顶部使用setlocal enableDelayedExpansion,然后使用!ERRORLEVEL!而不是%ERRORLEVEL%,您的问题将会得到解决。此外,GregHNZ是正确的,因为ERRORLEVEL测试应该紧跟在您的FINDSTR语句之后。

还有其他方法可以在括号内处理ERRORLEVEL,而不需要延迟扩展:

以下测试ERRORLEVEL是否大于或等于1

代码语言:javascript
复制
IF ERRORLEVEL 1 (...) ELSE (...)

并根据先前命令的结果有条件地执行命令

代码语言:javascript
复制
FindStr "SUCCESSFUL" test1.txt && (
  commands to execute if FindStr succeeded
) || (
  commands to execute if prior command failed.
)
票数 13
EN

Stack Overflow用户

发布于 2012-03-23 16:27:49

%ErrorLevel%变量仅适用于上一个命令。

所以当你这样做的时候:

代码语言:javascript
复制
echo Errorlevel: %ERRORLEVEL%

使用您当前的代码,您将获得上述CD命令的错误级别

尝试将if %ERRORLEVEL% ==1代码行直接放在FindStr命令之后,然后执行del和cd命令。显然,您需要将html文件的完整路径放在您的echo语句中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9835783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档