在 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 命令。