从 cmd 提示符中的 echo 捕获错误消息

Posted

技术标签:

【中文标题】从 cmd 提示符中的 echo 捕获错误消息【英文标题】:capturing error message from echo in cmd prompt 【发布时间】:2011-02-28 10:28:44 【问题描述】:

我正在将一些文本写入 cmd 批处理脚本中的文本文件,如下所示:

echo FlagValue=Y>>flag.txt

这通常可以正常工作,但有时如果文本文件由不同的进程打开,则会返回错误消息,提示访问被拒绝。如果出现以下错误,我想做的是停止批处理文件:

if return_code GEQ 1 GOTO ERR

但无法从 echo 命令中找到返回码。是否存在,或者是否有更好的策略来捕获错误消息?

【问题讨论】:

【参考方案1】:
echo FlagValue=Y>>flag.txt || echo access_denied Ensure you have rights

echo FlagValue=Y>>flag.txt
if /i %errorlevel% NEQ 0 do (
  echo access_denied Ensure you have rights
  call sendmail.cmd
)

示例:

C:\Users\Me\Desktop>echo Hello > MyFile.txt || echo ERROR
Access is denied.
ERROR

C:\Users\Me\Desktop>echo Hello > a.txt || echo ERROR

C:\Users\Me\Desktop>

【讨论】:

【参考方案2】:

每次运行命令时,ERRORLEVEL 环境变量都会设置为命令的返回值。因此,在运行命令后直接尝试 echo %ERRORLEVEL% 。 (请注意,您在中间运行的任何命令(包括 echo)都会覆盖 %ERRORLEVEL%。

另外,请查看这些以获取更多信息:Can a batch file capture the exit codes of the commands it is invoking?Batch Files - Error Handling

【讨论】:

我尝试构建一个小测试脚本 echo off echo testline>>file1.txt echo errorlevel=%ERRORLEVEL% 但我得到的结果是 The process cannot access the file because it is being used by another process .错误级别=0 当您可以访问该文件时,您会遇到什么错误级别?即尝试写入另一个文件 file2.txt 无论我是否可以写入文件,我仍然得到 errorlevel=0

以上是关于从 cmd 提示符中的 echo 捕获错误消息的主要内容,如果未能解决你的问题,请参考以下文章

怎样用ECHO命令

从命令行 Python 捕获错误

从 SQLPlus 捕获 Java 中的错误代码

语法错误:尝试在命令提示符中运行.py脚本时语法无效

如何在 PHP 类型提示中捕获“可捕获的致命错误”?

有没有办法捕获 MSDOS 命令提示符字符串?