如何捕获批处理中errorlevel对应的错误信息并写入日志文件
Windows批处理将errorlevel对应错误描述写入日志的实现方法
方案1:直接捕获命令原始错误输出(最简实现)
批处理中命令的错误提示默认输出到标准错误流(stderr),仅使用>> log.txt只会重定向标准输出流(stdout),添加2>&1即可将错误流也合并写入日志,命令执行时的原始错误信息会直接进入日志,无需额外处理errorlevel:
:: 示例:将命令的标准输出和错误输出都追加到log.txt dir ren asdf.txt test.txt >> log.txt 2>&1 echo %errorlevel% >> log.txt
用这个方法你示例中的File Not Found提示会直接写入日志,不需要再额外匹配错误码。
方案2:根据errorlevel输出自定义错误描述
如果需要统一错误描述格式、或者需要对特定错误码做额外处理,可以预定义错误码和描述的映射表,执行命令后匹配输出对应描述:
@echo off setlocal enabledelayedexpansion :: 预定义错误码和对应描述,可按需补充 set "err_msg_0=操作成功" set "err_msg_2=系统找不到指定文件" set "err_msg_9009=文件未找到/命令不可识别" set "err_msg_5=拒绝访问" :: 替换为你实际要执行的命令 dir ren asdf.txt test.txt >> log.txt 2>&1 set "curr_err=%errorlevel%" :: 写入错误信息到日志 echo 执行结束,错误码:%curr_err% >> log.txt if defined err_msg_%curr_err% ( echo 错误描述:!err_msg_%curr_err%! >> log.txt ) else ( echo 错误描述:未定义该错误码的说明 >> log.txt ) echo -------------------------- >> log.txt endlocal
关键说明:
- 必须开启延迟扩展(
enabledelayedexpansion)才能正确读取动态拼接的错误描述变量 - 错误码映射表可以根据你实际用到的命令返回值自行补充
- 如果同时需要保留命令原始错误输出和自定义描述,保留命令后的
2>&1即可
内容的提问来源于stack exchange,提问作者nrthtgrl
相关产品推荐
相关产品推荐

