如何将用户输入传递给批处理脚本中的参数?

时间:2019-02-13 07:08:57

标签: batch-file youtube-dl

此脚本利用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 :(得分:2)

在开始设置变量时,需要转义一些 % 个字符:

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%是预先定义的,因此我将其括在单个百分比中,(您