【问题标题】:Batch script using ffprobe使用 ffprobe 的批处理脚本
【发布时间】:2018-11-21 18:32:26
【问题描述】:

我最近一直在归档我的音乐库。我已经完成了我的批处理脚本如下:

@echo off
for /r %%a in (*.mp3) do (
    if exist "%%~dpna.txt" (
        Echo "%%~dpna.txt" already present, skip
    ) else (
       for /f "tokens=1,*delims=-" %%b in ("%%~na") do (
           echo Artist: %%b
           echo Song  :%%c asdad
       )>"%%~dpna.txt"
    )
)

到目前为止还不错。在论坛也有帮助。 >>Parse file name using batch automation

使用这个脚本,我能够通过解析和使用文件名来完成输出。但我现在面临的问题是,并非我所有的文件格式都不相同。所以进一步研究我的目标。我决定通过使用 ffprobe 提取元数据来完成我的任务。代码看起来不错,但我似乎无法回显结果,并且显示回显已关闭。任何帮助将不胜感激。

当前代码如下。

@echo off
for /r %%a in (*.mp3) do (
    if exist "%%~dpna.txt" (
        Echo "%%~dpna.txt" already present, skip
    ) else (
       for /F "delims=" %%I in ('ffprobe -v error -show_entries format_tags^=title,artist,comment -of default^=noprint_wrappers^=1:nokey^=1 %aa') do set "title=%%I"
       )>"%%~dpna.txt"
    )
)

【问题讨论】:

  • 什么是%aa请注意,您的元变量是 %%a,并且任何 % 字符都应在批处理文件中加倍。我还注意到您已经转义了 = 字符,但没有转义您的 , 字符,我建议您也转义这些字符!我也假设您的 ffprobe 可执行文件是批处理文件的本地或其在 %PATH% 中列出的位置,但您只是 Setting 变量,而不是 Echoing它到文本文件。
  • 您的问题是什么,您的预期输出是什么?

标签: batch-file ffprobe


【解决方案1】:

我认为您的嵌套For 循环没有任何原因,您应该能够直接运行ffprobe,因为您没有解析它的输出,只是将它重定向到一个文件。

请试试这个变化:

@Echo Off
For /R %%A In (*.mp3) Do If Not Exist "%%~dpnA.txt" (
        ffprobe -v error -show_entries format_tags=artist,comment,title -of default=nw=1:nk=1 "%%A"
    )>"%%~dpnA.txt"

【讨论】:

  • 谢谢!这有很大帮助。我不是一个真正的程序员。只做我能做的研究。不知道有一种更简单的方法可以不覆盖现有文件。干净整洁。 GJ。多谢,伙计。干杯! :)
猜你喜欢
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
相关资源
最近更新 更多