如何不在 findstr 上生成 ERRORLEVEL 1
How to not generate ERRORLEVEL 1 on findstr
我正在 Jenkins 上为我的工作构建验证,看看今天是不是假期。我有一个包含假期日期的 .csv 文件,我只需要查看今天是否在该文件中。
为此,我在 CentoOs 中使用了以下非常有效的代码:
TODAY="`date +%d/%m/%Y`"
if grep -qF $TODAY /home/holiday.csv; then
echo "ITS HOLIDAY, DONT RUN NOTHING"
exit 0
else
echo "ITS NOT HOLIDAY, RUN SOMETHING!"
fi
但是对于 运行 在 Windows 上的工作,我正在搜索“grep”的等效项并找到了“findstr”。工作方式非常相似,但有一个问题,我刚刚发现使用“ERRORLEVEL 1”进行验证。我的代码是:
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
set TODAY=%MyDate:~6,2%/%MyDate:~4,2%/%MyDate:~0,4%
findstr %TODAY% C:\holiday.csv
IF ERRORLEVEL 1 (echo "ITS NOT HOLIDAY, RUN SOMETHING!") ELSE (echo "ITS HOLIDAY, DONT RUN NOTHING")
问题是,对于 Jenkins,如果代码 returns ERRORLEVEL 1,代码有错误并且 Jenkins 将执行标记为错误,但在这种情况下没有问题,因为“未找到 == not holiday”(当然,因为 findstr 是一个错误,但你们明白了)。
另一个问题是,我发现我只需要输入“exit 0”,作业就不会标记为错误,但如果我这样做,将会出现 'echo "ITS NOT HOLIDAY, 运行 有点东西!” ' 我们永远不会知道是否有错误(我可以在 jenkins 日志上看到,但如果执行显示正确的结果,它会更直观"。
那么,我能做什么?
我怀疑OP把情况简单化了,实际代码是
IF ERRORLEVEL 1 (echo "ITS NOT HOLIDAY, RUN SOMETHING!"
ask_mr_jenkins_something
) ELSE (echo "ITS HOLIDAY, DONT RUN NOTHING")
echo
不会清除 errorlevel
,因此 Jenkins 在启动时会看到 errorlevel
=1。
要强制 errorlevel
为 0,请尝试
IF ERRORLEVEL 1 (echo "ITS NOT HOLIDAY, RUN SOMETHING!"
ver>nul
ask_mr_jenkins_something
) ELSE (echo "ITS HOLIDAY, DONT RUN NOTHING")
ver
报告版本号(毫无疑问你不想看到那个,因此 >nul
禁止报告)并将 errorlevel
设置为 0.
我正在 Jenkins 上为我的工作构建验证,看看今天是不是假期。我有一个包含假期日期的 .csv 文件,我只需要查看今天是否在该文件中。
为此,我在 CentoOs 中使用了以下非常有效的代码:
TODAY="`date +%d/%m/%Y`"
if grep -qF $TODAY /home/holiday.csv; then
echo "ITS HOLIDAY, DONT RUN NOTHING"
exit 0
else
echo "ITS NOT HOLIDAY, RUN SOMETHING!"
fi
但是对于 运行 在 Windows 上的工作,我正在搜索“grep”的等效项并找到了“findstr”。工作方式非常相似,但有一个问题,我刚刚发现使用“ERRORLEVEL 1”进行验证。我的代码是:
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
set TODAY=%MyDate:~6,2%/%MyDate:~4,2%/%MyDate:~0,4%
findstr %TODAY% C:\holiday.csv
IF ERRORLEVEL 1 (echo "ITS NOT HOLIDAY, RUN SOMETHING!") ELSE (echo "ITS HOLIDAY, DONT RUN NOTHING")
问题是,对于 Jenkins,如果代码 returns ERRORLEVEL 1,代码有错误并且 Jenkins 将执行标记为错误,但在这种情况下没有问题,因为“未找到 == not holiday”(当然,因为 findstr 是一个错误,但你们明白了)。
另一个问题是,我发现我只需要输入“exit 0”,作业就不会标记为错误,但如果我这样做,将会出现 'echo "ITS NOT HOLIDAY, 运行 有点东西!” ' 我们永远不会知道是否有错误(我可以在 jenkins 日志上看到,但如果执行显示正确的结果,它会更直观"。
那么,我能做什么?
我怀疑OP把情况简单化了,实际代码是
IF ERRORLEVEL 1 (echo "ITS NOT HOLIDAY, RUN SOMETHING!"
ask_mr_jenkins_something
) ELSE (echo "ITS HOLIDAY, DONT RUN NOTHING")
echo
不会清除 errorlevel
,因此 Jenkins 在启动时会看到 errorlevel
=1。
要强制 errorlevel
为 0,请尝试
IF ERRORLEVEL 1 (echo "ITS NOT HOLIDAY, RUN SOMETHING!"
ver>nul
ask_mr_jenkins_something
) ELSE (echo "ITS HOLIDAY, DONT RUN NOTHING")
ver
报告版本号(毫无疑问你不想看到那个,因此 >nul
禁止报告)并将 errorlevel
设置为 0.