当我直接从CMD中运行一个命令时,它工作得非常好,但是当在批处理文件中运行同样的命令时(或Jenkins使用批处理),它给我一个不同的结果,我不明白为什么。
简单的解释一下,我正在运行下面的命令来搜索一个日志文件中的文字字符串。
findstr /C:"MY STRING WITH A %variable%" M:\Logs\output.log
如果我检查结果的%ERRORLEVEL%,它显示了预期的值(0=找到了字符串或1=没有找到)。
然而,当我从批处理文件中运行同样的行,甚至从Jenkins中运行,结果总是0,即使该字符串不存在于日志中,%ERRORLEVEL%也总是0。
这就是批处理文件中包含命令的部分。
if %COUNTER% ==1 (
if not exist M:\Logs\current_bak (
ROBOCOPY "M:\Logs\tkcurrent" "M:\Logs\tkcurrent_bak"
REN "M:\Logs\current" "M:\Logs\current_bak"
MKDIR M:\Logs\current
echo Folders have been backed up
) else (
echo Back up folders are already in place )
findstr /C:"MY STRING WITH A %variable%" M:\Logs\output.log
if %ERRORLEVEL% == 0 (
echo Process has already being kicked off for the files with date %YYMMDD%, skipping it...
echo Download and backup compleated
exit /b 0 )
else (
echo Triggering next Jenkins Job:
curl -I http://<user>:<token>@remoteserver.domain.com:<port>/job/Hello_World/build?token=hello_world
exit /b 0 )
)
有没有人在过去经历过这种情况 或者能更好地指导我做错了什么或者不理解什么?
非常感谢!
你的错误是一个基本的语法错误,我也犯过很多次:P。问题出在你的 else
声明,这是一个特殊的问题,但发生的情况是。else
只有当它与那个 "我 "在同一条线上时,才会被处理。if
声明:
如果我把if语句和else语句放在不同的行上,就像这样。
@echo off
echo test
if errorlevel 1 (echo here)
else (echo not there)
pause
这样就会出现错误。
'else' is not recognized as an internal or external command,
operable program or batch file.
但是如果我稍微修改一下代码,让 else 和 if 在同一行,像这样:
@echo off
echo test
if errorlevel 1 (echo here
) else (echo not there)
pause
它就不会出现错误,并输出
test
not there
if %COUNTER%==1 (
if not exist M:\Logs\current_bak (
ROBOCOPY "M:\Logs\tkcurrent" "M:\Logs\tkcurrent_bak"
REN "M:\Logs\current" "M:\Logs\current_bak"
MKDIR M:\Logs\current
echo Folders have been backed up
) else (
echo Back up folders are already in place )
findstr /C:"MY STRING WITH A %variable%" M:\Logs\output.log
if %ERRORLEVEL% == 0 (
echo Process has already being kicked off for the files with date %YYMMDD%, skipping it...
echo Download and backup compleated
exit /b 0
) else (
echo Triggering next Jenkins Job:
curl -I http://<user>:<token>@remoteserver.domain.com:<port>/job/Hello_World/build?token=hello_world
exit /b 0 )
)
关于这种类型的更多信息 if /?
到cmd中。
注:我还修正了你的代码中的一个错别字,即 findsrt
而不是 findstr