WIN cmd重定向操作符可以防止重复行?

时间:2017-03-03 08:36:18

标签: windows batch-file cmd io-redirection

输出到文件时如何防止重复行?

ffmpeg.exe filename.mp4 -o filename.mkv >> output.log

.log文件将填充10多行进度:0%等等每个编码步骤

我如何防止这种情况,因此它只会写进度:0%一次然后等待进度1%等等?

1 个答案:

答案 0 :(得分:1)

这是一个批处理代码,其中 FOR 从执行的命令的 STDOUT STDERR 中读取每一行,并将其与先前的读取行进行比较。如果新读取的行与先前读取的行不同,则使用重定向运算符>>将此行输出到文件。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
del output.log 2>nul
set "Line="
for /F "delims=" %%I in ('ffmpeg.exe filename.mp4 -o filename.mkv 2^>^&1') do (
    if not "!Line!" == "%%I" (
        set "Line=%%I"
        echo !Line!>>output.log
    )
)
endlocal

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • del /?
  • echo /?
  • endlocal /?
  • for /?
  • if /?
  • set /?
  • setlocal /?

另请阅读Microsoft有关Using Command Redirection Operators

的文章

PS:我没有安装ffmpeg因此无法在上面测试,也没有安装此工具的文档。但请看一下ffmpeg output parse in batch script,因为我认为您真正需要的是将写入 STDERR 的消息重定向到输出文件中:

ffmpeg.exe filename.mp4 -o filename.mkv 2>>output.log