Batch file 如何将cmd输出错误消息作为批处理文件的输入?

Batch file 如何将cmd输出错误消息作为批处理文件的输入?,batch-file,Batch File,我有一个oracle sqldeveloper文件 当我使用批处理文件运行它时,如果遇到错误,cmd肯定会显示错误 我想要的是,是否可以将cmd错误作为一个输入来触发我定制的错误消息 如果在cmd中显示任何错误,例如: Parameter not found 批处理文件中的自定义错误消息将在cmd中触发此错误消息: You Got An Error! 如有任何帮助和建议,我们将不胜感激 提前谢谢 您可以将输出(stdout和stderr)重定向到文本文件(如果您不关心输出,则重定向到nul)

我有一个oracle sqldeveloper文件

当我使用批处理文件运行它时,如果遇到错误,cmd肯定会显示错误

我想要的是,是否可以将cmd错误作为一个输入来触发我定制的错误消息

如果在cmd中显示任何错误,例如:

Parameter not found
批处理文件中的自定义错误消息将在cmd中触发此错误消息:

You Got An Error!
如有任何帮助和建议,我们将不胜感激


提前谢谢

您可以将输出(stdout和stderr)重定向到文本文件(如果您不关心输出,则重定向到
nul
),并在脚本执行后检查“%ERRORLEVEL%”的值。如果不是0,则显示您自己的错误消息

要重定向stdout和stderr,请执行以下操作:


命令参数1>>c:\log.txt 2>&1

我建议使用SQL*Plus而不是SQL Developer。您可以将SQLERROR EXIT FAILURE添加到脚本顶部(如果您对特定错误代码感兴趣,可以退出SQL.SQLCODE)。然后调用批处理文件将收到%ERRORLEVEL%中的错误代码,您可以采取适当的措施。如果您的SQL脚本与操作系统接口可能出现故障,那么每当操作系统错误退出时,也会出现故障


我不认为SQL*Plus使用了stderr,因此我认为您不必担心重定向2>&1。

谢谢您的回复,但我想找到一个不依赖于errorlevel的解决方案,因为尽管我的代码中有错误,但我的errorlevel将始终返回0。。如果我没有弄错,errorlevel将只检查批处理文件,而不是代码。如果我弄错了,请纠正我。。如果在批处理文件中执行特定命令后检查
%ERRORLEVEL%
的值,您将得到该命令返回的错误代码(本例中的SQL命令)。但是,您使用的SQL命令可能总是返回0。如果是这种情况,那么我的解决方案将无法正常工作@dbenham已经发布了一个潜在的问题修复程序,也许您应该调查该路径?问题是:如果cmd没有显示错误,您定制的错误消息例程将永远挂起?谢谢您的建议。我认为当我的代码成功时,CMD将自动退出。使用Exit命令很容易做到这一点。但如果我的代码中有错误,它将触发我的自定义消息。。