Batch file 使用ffprobe的批处理脚本

Batch file 使用ffprobe的批处理脚本,batch-file,ffprobe,Batch File,Ffprobe,最近我一直在对我的音乐库进行归档。我已经完成了我的批处理脚本,如下所示: @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 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"
    )
)
到目前为止还不错。在论坛上也有帮助。>>

有了这个脚本,我可以通过解析和使用文件名来完成输出。但我现在面临的问题是,并非所有文件的格式都不相同。因此,我的目标是进一步研究。我决定通过使用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"
    )
)

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

请尝试此变体:

@Echo关闭
对于(*.mp3)中的/R%%A,如果不存在,请执行“%%~dpnA.txt”(
ffprobe-v错误-显示\u条目格式\u标签=艺术家、注释、标题-默认值=nw=1:nk=1“%%A”
)>“%%~dpnA.txt”

什么是
%aa
?请注意,元变量是
%%a
,批处理文件中的任何
%%
字符都应加倍。我还注意到,您已经转义了
=
字符,但没有转义
字符,我建议这些字符也转义!我也假设您的
ffprobe
可执行文件是批处理文件的本地文件或其在
%PATH%
中列出的位置,但您只是
设置变量,而不是
将其回显到文本文件中。您的问题是什么,您的预期输出是什么?谢谢!这帮了大忙。我不是一个真正的程序员。只是做我能从研究中得到的。不知道有更简单的方法不覆盖现有文件。整洁。GJ。谢谢你,伙计。干杯!:)