Пакет: IF и отложенное расширение

У меня есть пакетный файл для загрузки видео с YouTube как 01-title1.m4a, 02-title2.m4a и т. д. Однако у меня возникли проблемы с корректной работой видео с номером n. Если это однозначное число, я хочу добавить ноль впереди, но не могу заставить его работать.

Если я изменю строку IF в строке FOR на IF %n%==%n:~0,1% SET n=0!n!, это сработает, но тогда при сравнении будет использоваться только начальное значение n. Тем не менее, когда я делаю echo !n!==!n:~0,1! непосредственно перед IF, я получаю 1==1, 2==2, как и ожидалось.

:: Enter YouTube link including https, or just the video ID
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET url_list=
:loop
SET url=
SET /P url="Enter URL: "
SET url="%url%"
IF %url%=="" GOTO endloop
IF %url%=="%url:~1,11%" (SET url=%url:~1,11%) ELSE SET url=%url:~33,11%
SET url_list=%url_list% %url%
GOTO loop
:endloop
SET url_list=%url_list:~1%
SET /P n="Enter n: "
IF [%n%] == [] SET n=1
FOR %%u IN (%url_list%) DO (
    IF !n!==!n:~0,1! SET n=0!n!
    youtube-dl --output "D:\Users\Joakim\Downloads\!n!-%%(title)s.%%(ext)s" --extract-audio --format 18 "https://www.youtube.com/watch?v=%%u"
    SET /A n+=1
)

person Blrp    schedule 22.09.2017    source источник
comment
Проблема в том, что вы устанавливаете n в восьмеричное число, предваряя его нулем. Вы не можете добавить 1 к 08 и 09. Вместо этого просто сделайте подстроку.   -  person Squashman    schedule 23.09.2017


Ответы (1)


....
set /a zn=100+n
youtube-dl --output "D:\Users\Joakim\Downloads\!zn:~-2!-%%(title)s.%%(ext)s" --extract-audio --format 18 "https://www.youtube.com/watch?v=%%u"
....

set /a использует значения времени выполнения своих аргументов для установки своей целевой переменной, поэтому zn устанавливается в значение времени выполнения n +100. Затем используйте последние 2 символа zn в строке youtube-dl.

person Magoo    schedule 23.09.2017