WIN10 - 如何在写入输出文件之前修改 STDERR

WIN10 - 如何在写入输出文件之前修改 STDERR

在 Windows 中,如何在将 STDERR 写入输出文件之前更改它?

目标是创建一个包含所有 ffmpeg 完整性错误的日志文件。

ffmpeg-递归-错误.bat

@echo off

set "_var1_DoHeading=ZZZ"

FOR /R "S:\#MiscDownloads\test\" %%G IN (*.mp4) DO (
  echo Processing... %%G
  set "_var1_DoHeading=YES"
  echo [a - The value of _var1_DoHeading is %_var1_DoHeading% ]
  for /f "usebackq delims==" %%H in (`ffmpeg.exe -xerror -v error -i "%%G" -f null - 2^>^&1`) do (
    if %_var1_DoHeading%==YES (
      echo ====================
      echo %%G
    )
    set "_var1_DoHeading=NO"
    echo [b - The value of _var1_DoHeading is %_var1_DoHeading% ]
    echo %%H
  )   
)
echo Done

错误

PS C:\duplicate-file-finder> .\ffmpeg-check-for-errors.bat

处理中...S:#MiscDownloads\test\test_video.mp4

[a - _var1_DoHeading 的值为 ZZZ ]

[b - _var1_DoHeading 的值为 ZZZ ]

[aac@000001b1848bed40] 通道元素 0.0 未分配

[b - _var1_DoHeading 的值为 ZZZ ]

[h264 @ 000001b184936b80] 解码 MB 60 21 时出错,字节流 -7

完毕

参考:

答案1

没有用于 STDIN 和 STDERR 的环境变量。您需要明确地将它们导入到其他命令中。

我建议使用这种语法:

for /f "delims=" %%a in ('ffmpeg ... 2^>^&1') do set "myvar=%%a"

的输出ffmpeg将成为的值myvar,可供使用%myvar%

^批处理转义字符。如果您需要命令中的参数引号ffmpeg,请使用usebackq将其替换为反引号的选项。

更多信息请参阅 FOR /F 命令

相关内容