Как передать пользовательский ввод в параметр в пакетном скрипте? - PullRequest
0 голосов
/ 13 февраля 2019

Этот скрипт использует функции youtubedl + aria2c для загрузки видео с YouTube.

Невозможно завершить Опция 4 для определенного формата.Я создал formatF переменную, которая хранит пользовательский ввод и передает это значение другой переменной DnSelect

SET DnSelect=--no-check-certificate -f "%formatF%" --external-downloader aria2c --external-downloader-args "-x16 -s16 -k1M

Мой код / ​​скрипт:

@echo off
SET DnBest=--no-check-certificate -f 22 --external-downloader aria2c --external-downloader-args "-x16 -s16 -k1M"
SET DnSelect=--no-check-certificate -f "%formatF%" --external-downloader aria2c --external-downloader-args "-x16 -s16 -k1M"
SET Destination=""%home%"\%%(title)s.%%(ext)s"
if not -%1-==-- SET URL=%*  
if -%1-==-- goto fopNew 

:top
CLS
ECHO URL: %URL%
ECHO ----------------------
ECHO Available operations:
ECHO ----------------------
ECHO .

ECHO 1. Best of all
ECHO 2. Check all formats available
ECHO 3. New URI
ECHO 4. Select specific format
ECHO 5. Exit
SET /P operation=Which operation would you like to do?:
if "%operation%"=="n" goto fopNew
if "%operation%"=="N" goto fopNew
if "%operation%"=="1" goto fop1
if "%operation%"=="2" goto fopFormat
if "%operation%"=="3" goto :fopNew
if "%operation%"=="4" goto :fopSelect
if "%operation%"=="5" goto :fopQuit

:fop1
ECHO Best:
youtube-dl %DnBest% -o %Destination% %URL%
pause
goto top

:fopFormat
ECHO List of all possible formats:
youtube-dl -F %URL%
pause
goto top

:fopSelect
ECHO List of all possible formats:
youtube-dl -F %URL%
ECHO Enter number of desired format from all possible formats:
SET /P formatF=:
ECHO Download selected format:
youtube-dl %DnSelect% -o %Destination% %URL%
pause
goto top

:fopNew
SET /P URL=Enter the video URL:
goto top

:fopQuit
@echo off

Вывод:

ОШИБКА: запрошенный формат недоступен

Я просто хочу выбрать поддерживаемый формат из списка доступных форматов и загрузить его.

1 Ответ

0 голосов
/ 13 февраля 2019

Поскольку вы устанавливаете переменные с самого начала, вам нужно экранировать некоторые из ваших % символов:

Set "DnBest=--no-check-certificate -f 22 --external-downloader aria2c --external-downloader-args "-x16 -s16 -k1M""
Set "DnSelect=--no-check-certificate -f "%%formatF%%" --external-downloader aria2c --external-downloader-args "-x16 -s16 -k1M""
Set "Destination=""%home%"\%%%%(title)s.%%%%(ext)s""

В приведенном выше примере я предположилчто при вызове сценария переменная %formatF% в это время не определена, поэтому я избежал символов процента в нем.Я также предположил, , поскольку он не установлен в предоставленном коде , что переменная %home% предопределена, поэтому я оставил ее заключенной в один процент (вам потребуетсяиспользуйте двойной процент, если он определен в скрипте, но не показан в вашем фрагменте) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...