我自己写了一个脚本来下载播放列表。
但我有两个问题,我不知道如何解决。
- 为什么我输入以下形式的链接时会出现错误:
https://www.youtube.com/playlist?list=PL38DFE33C78765533
,
我发现分配出错了,它将行分为
https://www.youtube.com/playlist?list
和PL38DFE33C78765533
。如何使其工作? - 为什么参数 DOWNPATHLIST 被错误传递?
SET DOWNPATHLIST= "%%(playlist_index)s - %%(title)s.%%(ext)s"
SET CACHDIR= ".cache"
SET /P id= Please, Enter ID or Link:
CALL :YOUTUBEDOWN %id%, "-f bestvideo[ext!=webm]??+bestaudio[ext!=webm]??/best[ext!=webm]", "-o %%DOWNPATHLIST%%"
:YOUTUBEDOWN
youtube-dl --cache-dir %CACHDIR% %~1 %~2 %~3 %~4 %~5
PAUSE
答案1
问题部分源于
- 不合逻辑地使用双引号和
- 需要通过
%
加倍符号来避免将其解释为表示变量%%
。但每次 cmd.exe 解析一行 set/call 时,它都会将二减%%
为一%
。 - 等号还会分割命令行参数(如,;tab)并被删除。
尝试这个:
SET "DOWNPATHLIST=%%(playlist_index)s - %%(title)s.%%(ext)s"
SET "CACHDIR=.cache"
SET /P "id=Please, Enter ID or Link:"
CALL :YOUTUBEDOWN %id%, "-f bestvideo[ext!=webm]??+bestaudio[ext!=webm]??/best[ext!=webm]", "-o %%DOWNPATHLIST%%"
Pause
Goto :Eof
:YOUTUBEDOWN
youtube-dl --cache-dir %CACHDIR% %*
PAUSE
将%*
解析所有传递的参数,不做任何修改。为了测试,您可以暂时在前面youtube-dl
加上 echo。