从 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 捕获错误消息的主要内容,如果未能解决你的问题,请参考以下文章