我正在编写用于部署asp.net解决方案的第一个批处理文件.我一直在谷歌搜索一般的错误处理方法,找不到任何真正有用的东西.
基本上如果出现任何问题我想停下来打印出错的地方.
任何人都可以给我任何指示吗?
dbe*_*ham 67
我通常发现条件命令连接运算符比ERRORLEVEL更方便.
yourCommand && (
echo yourCommand was successful
) || (
echo yourCommand failed
)
Run Code Online (Sandbox Code Playgroud)
您应该注意一个并发症.如果成功分支中的最后一个命令引发错误,则将触发错误分支.
yourCommand && (
someCommandThatMayFail
) || (
echo This will fire if yourCommand or someCommandThatMayFail raises an error
)
Run Code Online (Sandbox Code Playgroud)
修复是插入一个无害的命令,保证在成功分支结束时成功.我喜欢使用(call ),除了将ERRORLEVEL设置为0 (call)之外什么都不做.除了将ERRORLEVEL设置为1之外,有一个推论无效.
yourCommand && (
someCommandThatMayFail
(call )
) || (
echo This can only fire if yourCommand raises an error
)
Run Code Online (Sandbox Code Playgroud)
有关使用ERRORLEVEL检测错误时所需的复杂性示例,请参阅Windows批处理文件中的非零(错误)返回代码的万无一失的方法.
使用ERRORLEVEL是最简单的选择.但是,如果您正在调用外部程序来执行某些任务,并且它没有返回正确的代码,则可以将输出通过管道传输到"find"并从中检查错误级别.
c:\mypath\myexe.exe | find "ERROR" >nul2>nul
if not ERRORLEVEL 1 (
echo. Uh oh, something bad happened
exit /b 1
)
Run Code Online (Sandbox Code Playgroud)
或者提供有关发生的事情的更多信息
c:\mypath\myexe.exe 2&1> myexe.log
find "Invalid File" "myexe.log" >nul2>nul && echo.Invalid File error in Myexe.exe && exit /b 1
find "Error 0x12345678" "myexe.log" >nul2>nul && echo.Myexe.exe was unable to contact server x && exit /b 1
Run Code Online (Sandbox Code Playgroud)
除ERRORLEVEL之外,批处理文件没有错误处理.您想要查看更强大的脚本语言.我一直在将代码移到PowerShell.
轻松使用.Net程序集和方法的能力是我开始使用PowerShell的主要原因之一.改进的错误处理是另一个.微软现在要求其所有服务器程序(Exchange,SQL Server等)都是PowerShell可驱动的这一事实纯粹是锦上添花.
现在,看起来任何时候投入学习和使用PowerShell都会花费很多时间.
小智 5
您可以使用来捕获本地网络上的ping成功ERRORLEVEL。
@ECHO OFF
PING 10.0.0.123
IF ERRORLEVEL 1 GOTO NOT-THERE
ECHO IP ADDRESS EXISTS
PAUSE
EXIT
:NOT-THERE
ECHO IP ADDRESS NOT NOT EXIST
PAUSE
EXIT
Run Code Online (Sandbox Code Playgroud)