Как передать пользовательский ввод в параметр в пакетном скрипте?

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

Невозможно выполнить Вариант 4 для определенного формата. Я создал переменную формат F, которая хранит пользовательский ввод и передает это значение другой переменной 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

Вывод:

ERROR: requested format not available

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

Вы устанавливаете DnSelect с %formatF% до того, как оно будет определено. Поместите эту строку непосредственно перед youtube-dl %DnSelect% -o %Destination% %URL%

user6811411 13.02.2019 08:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
304
1

Ответы 1

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

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% предопределена, поэтому я оставил ее заключенной в один процент, (вам нужно будет использовать двойные проценты, если это определено в скрипте, но не показано в вашем фрагменте).

Другие вопросы по теме