如何在bat批处理中使用find命令捕获程序输出错误并设置自定义退出码
实现方案
你原有写法失效主要有两个核心原因:
- 逐位写
%1~%9的传参方式遇到带空格、特殊字符的参数时会出现拆分错误,且无法支持超过9个的传入参数 - 管道符两侧的命令会在独立的CMD子进程中执行,直接写
exit只会退出子进程,不会作用到你的主批处理文件
最稳妥的实现(临时文件中转,无兼容性问题)
@echo off :: 配置aerender路径 set "AE_PATH=c:\Program Files\Adobe\Adobe After Effects 2021\Support Files\aerender.exe" :: 生成随机临时日志路径,避免冲突 set "TEMP_RENDER_LOG=%temp%\ae_render_%random%.log" :: 执行渲染,%*自动传递所有传入参数,2>&1把错误输出也重定向到日志 "%AE_PATH%" %* > "%TEMP_RENDER_LOG%" 2>&1 :: 检索日志中是否存在ERROR关键词,/i表示不区分大小写 find /i "ERROR" "%TEMP_RENDER_LOG%" >nul if %errorlevel% equ 0 ( :: 找到错误则清理临时文件,返回32错误码 del /f /q "%TEMP_RENDER_LOG%" exit /b 32 ) :: 无错误则清理临时文件正常退出 del /f /q "%TEMP_RENDER_LOG%" exit /b 0
注意事项
- 不要省略
2>&1,aerender的很多错误信息会输出到标准错误流,不加该参数会导致find无法捕获到报错内容 exit /b表示仅退出当前批处理进程,如果你需要直接关闭整个CMD窗口,可以去掉/b参数
内容的提问来源于stack exchange,提问作者Bruno Rantin Po
相关产品推荐
相关产品推荐

