Всегда заключайте переменные в операторы IF.
Это необходимо по двум причинам.
Это позволяет избежать синтаксических ошибок, когда переменная пуста, содержит пробелы, другие разделители или специальные символы, такие как &|<>...
.
Это позволяет избежать проблем с синтаксисом модификатора переменной, таким как поиск / замена !var:search=replace!
или синтаксис подстроки !var:~<start>,<size>!
Отсроченное расширение
Ваша вторая проблема заключается в том, что процентное расширение происходит, когда блок анализируется перед его выполнением.
Поэтому if %v%==P ...
никогда не расширяется до значения введенного v
, вместо этого он был расширен, вероятно, до нуля.
В блоках (или лучше всегда) используйте замедленное расширение.
if not "!url:&list=!" == "!url!" (
set /p v="video or playlist ? (V/P)"
if "!v!" == "P" (
youtube-dl.exe -f !qual! --yes-playlist "!url!"
) else (
...