Os problemas surgem em parte de
- uso inconsequente de aspas duplas e
- a necessidade de escapar dos sinais
%
para não ser interpretada como denotando uma variável, dobrando-as em%%
. Mas toda vez cmd.exe analisa uma linha set / call reduz em dois%%
para um%
. - Também o sinal de igual divide os argumets da linha de comando (como,; tab) e é removido.
Tente isto:
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
O %*
resolverá todos os argumentos aprovados inalterados.
Para testar, você pode preceder temporariamente youtube-dl
com um eco.