shell - FindStr 无法正常工作

标签 shell batch-file findstr

我做了一段批处理代码,我认为这会奏效。我在想这段代码在做什么?我有一些插件,我想测试部署是否正确。所以我从plugins.txt 中得到了pluginlink。然后我用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

最佳答案

经典批处理问题 - 您正在设置 ERRORLEVEL 并尝试使用 %ERRORLEVEL% 访问它同内DO()条款。 %VAR%扩展发生在解析时,整个 FOR ... DO()语句被解析一次,因此您会在执行语句之前看到 ERRORLEVEL 的值。显然这行不通。

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.
)

关于shell - FindStr 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9835783/

相关文章:

linux - 随 secret 码变量消失

linux - 如何在脚本中使用 sudo 执行多个命令

batch-file - 批处理文件查找 USB 驱动器并更改驱动器号

windows - FINDSTR 在从 Windows XP 到 Windows Server 2012 的所有 Windows 操作系统上的位置是什么?

regex - 在 FINDSTR 中使用子模式

windows - findstr ms-dos 命令不会搜索子目录

windows - lambda 提示符在命令行中表示什么?

regex - 使用 bash/coreutils 而不是 perl 按函数排序

windows - 用于检查电池状态变量并在 if 语句中使用它的脚本,是否有任何脚本可以使 .bat 文件每分钟作为隐藏进程运行

database - 批量制作词典