我目前正在编写第一个用于部署asp.net解决方案的批处理文件。 我一直在谷歌搜索一般的错误处理方法,找不到任何真正有用的东西。
基本上如果出现任何问题我想停下来打印出错的地方。
任何人都可以给我任何指示吗?
答案 0 :(得分:62)
我通常发现条件命令连接运算符比ERRORLEVEL更方便。
yourCommand && (
echo yourCommand was successful
) || (
echo yourCommand failed
)
您应该注意一个并发症。如果成功分支中的最后一个命令引发错误,则将触发错误分支。
yourCommand && (
someCommandThatMayFail
) || (
echo This will fire if yourCommand or someCommandThatMayFail raises an error
)
修复是插入一个无害的命令,保证在成功分支结束时成功。我喜欢使用(call )
,除了将ERRORLEVEL设置为0之外什么都不做。除了将ERRORLEVEL设置为1之外,还有一个推论(call)
除外。
yourCommand && (
someCommandThatMayFail
(call )
) || (
echo This can only fire if yourCommand raises an error
)
有关使用ERRORLEVEL检测错误时所需的错综复杂的示例,请参阅Foolproof way to check for nonzero (error) return code in windows batch file。
答案 1 :(得分:8)
在可用时使用ERRORLEVEL是最简单的选择。但是,如果您正在调用外部程序来执行某项任务,并且它没有返回正确的代码,您可以将输出通过管道传输到“find”并检查错误级别。
c:\mypath\myexe.exe | find "ERROR" >nul2>nul
if not ERRORLEVEL 1 (
echo. Uh oh, something bad happened
exit /b 1
)
或者提供有关发生的事情的更多信息
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
答案 2 :(得分:7)
除了ERRORLEVEL之外,批处理文件没有错误处理。您想要查看更强大的脚本语言。我一直在将代码移到PowerShell。
轻松使用.Net程序集和方法的能力是我开始使用PowerShell的主要原因之一。改进的错误处理是另一个。事实上,微软现在要求其所有服务器程序(Exchange,SQL Server等)都是PowerShell可驱动的,这一点非常简单。
现在,看起来任何时候投入学习和使用PowerShell的时间都会很长。
答案 3 :(得分:4)
使用ERRORLEVEL
可以捕获本地网络上的成功ping。
@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
答案 4 :(得分:0)
我想这个功能是自OP以来添加的,但是对于将在命令窗口中输出的未来参考错误,可以重定向到独立于标准输出的文件
命令1> file - 将命令的标准输出写入文件
命令2> file - 将命令的标准错误写入文件
答案 5 :(得分:0)
Python Unittest,Bat process错误代码:
if __name__ == "__main__":
test_suite = unittest.TestSuite()
test_suite.addTest(RunTestCases("test_aggregationCount_001"))
runner = unittest.TextTestRunner()
result = runner.run(test_suite)
# result = unittest.TextTestRunner().run(test_suite)
if result.wasSuccessful():
print("############### Test Successful! ###############")
sys.exit(1)
else:
print("############### Test Failed! ###############")
sys.exit()
蝙蝠代码:
@echo off
for /l %%a in (1,1,2) do (
testcase_test.py && (
echo Error found. Waiting here...
pause
) || (
echo This time of test is ok.
)
)
答案 6 :(得分:-4)
非常容易! 创建一个包含以下内容的文件:
call <filename> // the file you made
cls
echo An error occured!
<Your commands>
pause
所以现在当你启动它时,它将正常启动你的程序。但是当出现任何问题时,它会退出并继续第一个文件中的脚本。现在,您可以将自己的命令放入。