我想知道下面第二条命令的语法有什么问题。它没有给出预期的结果。
此行结果为预期文件名,由来自 yt 的视频标题和固定文件扩展名组成。
yt-dlp --print filename -o %(title)s.mkv https://www.youtube.com/watch?v=Diw4iqKSV8I
gd3kr⧸BlenderGPT - Gource visualisation.mkv
但是,当我尝试使用此行将初始命令的输出设置为变量时,输出标题被修剪并且没有扩展名(缺少:“-Gource visualisation.mkv”)。
for /F %O in ('"yt-dlp --print filename -o %(title)s.mkv https://www.youtube.com/watch?v=Diw4iqKSV8I"') do set output=%O
set output=gd3kr⧸BlenderGPT
如何修改此行以获取完整的预期字符串?
答案1
输出标题被修剪并且没有扩展名
默认情况下,解析输出时for /f
仅返回第一个标记:
tokens=n
每行要读取的编号项目。默认值 = 1。
...
tokens=*
将导致每行的所有项目被处理
来源:For - 循环遍历命令输出 - Windows CMD - SS64.com
标记的默认分隔符是空格字符。
将您的for
命令更改为:
for /F "tokens=*" %O in ('"yt-dlp --print filename -o %(title)s.mkv https://www.youtube.com/watch?v=Diw4iqKSV8I"') do set output=%O