Windows 批处理文件,检查是否返回错误,然后执行操作?
对于批处理文件,我正在尝试运行命令,如果命令返回错误,请尝试对每个命令使用GOTO执行其他命令…但是脚本不断失败并出现错误…但现在不应该这样做,至少如果最后一个GOTO不起作用,它应该进入一个无休止的循环 我读到检查是否有错误是这样的Windows 批处理文件,检查是否返回错误,然后执行操作?,windows,batch-file,Windows,Batch File,对于批处理文件,我正在尝试运行命令,如果命令返回错误,请尝试对每个命令使用GOTO执行其他命令…但是脚本不断失败并出现错误…但现在不应该这样做,至少如果最后一个GOTO不起作用,它应该进入一个无休止的循环 我读到检查是否有错误是这样的 IF %ERRORLEVEL% NEQ 0 ( GOTO tryInRoot ) 但我不太确定,有什么帮助吗 grunt precommit IF %ERRORLEVEL% NEQ 0 ( GOTO tryInRoot ) :tryInRoot
IF %ERRORLEVEL% NEQ 0 (
GOTO tryInRoot
)
但我不太确定,有什么帮助吗
grunt precommit
IF %ERRORLEVEL% NEQ 0 (
GOTO tryInRoot
)
:tryInRoot
cd mow\client && grunt precommit
IF %ERRORLEVEL% NEQ 0 (
GOTO tryInTrunk
)
:tryInTrunk
cd client && grunt precommit
IF %ERRORLEVEL% NEQ 0 (
GOTO whenInMapManager
)
:whenInMapManager
cd ..
IF EXIST "Gruntfile.js" (
GOTO leavingMapManager
) ELSE (
GOTO whenInMapManager
)
:leavingMapManager
cd ..
cd mow\client && grunt precommit
使用
|
是一个更好的选择
但是,GOTO有一个独特的情况,它将中断| |
,因此您需要在此之前添加调用
调用grunt-precommit | | | cd-mow\client&&grunt-precommit | | cd-client&&grunt-precommit | | |转到whenInMapManager
您的逻辑没有多大意义。即使errorlevel为零,它仍将运行:tryInRoot和:tryIntrunk和:whenInMapManager。如果errorlevel为零,您需要逻辑让它跳过该代码。@Squashman啊,那么这只是简单地为这些情况添加ELSE块以退出exit\b
请注意,许多命令都已设置,但不会重置它们,因此,即使您已按照建议更正了逻辑(例如,通过添加else goto:where
),在出现第一个异常时,ErrorLevel
可能仍然是非零值。作为if%ErrorLevel%
查询的替代方法,您也可以使用,它检查前面命令的退出代码…我从这开始,但如果前三个失败,我需要添加一个GOTO,以循环cd,直到某个点…基本上grunt-precommit | | | cd-mow\client和&grunt-precommit | | cd-client和&grunt-precommit | | | GOTO whenimapmanager
所以我猜使用条件执行运算符对GOTO不起作用,或者我的逻辑在其他地方是错误的?在上述情况下应该使用括号,例如grunt-precommit |(cd-mow\client和grunt-precommit)|(cd客户端和grunt预调试)| |转到whenInMapManager
。注意,您将在\mow\client\client
中运行最后一次预编译