在将命令的输出设置为 cmd 中的变量时修剪字符串

在将命令的输出设置为 cmd 中的变量时修剪字符串

我想知道下面第二条命令的语法有什么问题。它没有给出预期的结果。

此行结果为预期文件名,由来自 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

相关内容