似乎您想要这样的东西:
@echo off
for /f "tokens=1,2*delims=:" %%i in ('git pull origin master 2^>^&1') do (
set rtncode=%%i:%%j
if /i "%%i"=="fatal" echo %%i:%%j & goto :end
if /i "%%i"=="error" echo %%i:%%j & goto :end
if /i "%%i"=="conflict" echo %%i:%%j & goto :end
if /i "%%i"=="failed" echo %%i:%%j & goto :end
)
echo %rtncode%
echo When you get here,you did not experience the errors above,so code can go here
:end
Pause
解释代码。 for /f
使用定界符:
将字符串分为两部分,然后将:
之前的所有内容分配给第一个元变量%%i
,并将:
之后的所有内容分配给到%%j
,因为我们专门说过要使用令牌1
和2
。
这里的重要部分是命令后的2>^&1
位。这指定我们应该将标准错误重定向到标准输出。这允许将错误消息以及正常的成功消息分配给元变量。然后,我们只将每个分配的元变量%%i
与硬编码的文本fatal
,error
等进行匹配,这样匹配最终会变成这样。元变量%%i
已分配了值,假设fatal
:
if /i "fatal"=="fatal"
以上匹配,因此它将执行条件
echo %%i:%%j & goto :end
这将打印存储的错误消息并退出循环并绕过:end
之前的所有命令
您可以打开cmd.exe
并运行以下命令以获得更多帮助:
for /?
if /?
我添加了set
设置%rtncode%
,它将为输出分配任何输出,如果您不匹配循环中的任何错误,则会显示该输出。
,
我可能误解了您的问题,但是似乎只需要以下未经测试的单行即可:
@git pull origin master 2>&1 1>CON|Find /V ""&&(Echo Ending script. Please fix the error then retry.&Pause>NUL&GoTo :EOF)||Pause
本文链接:https://www.f2er.com/3023015.html