如何正确地将参数传递给函数?

如何正确地将参数传递给函数?

我自己写了一个脚本来下载播放列表。
但我有两个问题,我不知道如何解决。

  • 为什么我输入以下形式的链接时会出现错误:
    https://www.youtube.com/playlist?list=PL38DFE33C78765533
    我发现分配出错了,它将行分为
    https://www.youtube.com/playlist?listPL38DFE33C78765533。如何使其工作?
  • 为什么参数 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。

相关内容