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

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

echo FlagValue=Y>>flag.txt

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

if return_code GEQ 1 GOTO ERR

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

【问题讨论】:

    标签: cmd


    【解决方案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
      猜你喜欢
      • 2014-09-03
      • 2013-02-08
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2016-12-17
      • 2016-03-25
      相关资源
      最近更新 更多