Batch file 更改youtube dl下载输出(Windows)

Batch file 更改youtube dl下载输出(Windows),batch-file,ffmpeg,youtube-dl,ffprobe,Batch File,Ffmpeg,Youtube Dl,Ffprobe,我希望你能帮助我 我正在windows上使用youtube dl(youtube dl.exe) 下载视频效果很好,而且只下载音频。但我想让它将音频文件保存在另一个地方,例如C:\Users*********\Desktop 我用以下代码创建了一个批处理文件: :audio cls echo. echo. echo Your audio vill be downloaded and saved as a .mp3 format echo. echo. set /p audio=Enter Vid

我希望你能帮助我

我正在windows上使用youtube dl(youtube dl.exe) 下载视频效果很好,而且只下载音频。但我想让它将音频文件保存在另一个地方,例如C:\Users*********\Desktop

我用以下代码创建了一个批处理文件:

:audio
cls
echo.
echo.
echo Your audio vill be downloaded and saved as a .mp3 format
echo.
echo.
set /p audio=Enter Video URL here:
cls
youtube-dl.exe --extract-audio --audio-format mp3 --output C:\Users\*******\Desktop\(ext)s.%(ext)s %audio%
pause
cls
echo.
echo.
echo.
echo.
echo Your audio has now been downloaded.
ping localhost -n 3 >nul
exit
然后它给了我这个

Usage: youtube-dl.exe [OPTIONS] URL [URL...]

youtube-dl.exe: error: You must provide at least one URL.
Type youtube-dl --help to see a list of all options.
Press any key to continue . . .
如果我使用它,效果很好,但它会保存在同一个文件夹中

:audio
cls
echo.
echo.
echo Your audio vill be downloaded and saved as a .mp3 format
echo.
echo.
set /p audio=Enter Video URL here:
cls
youtube-dl.exe --extract-audio --audio-format mp3 %audio%
pause
cls
echo.
echo.
echo.
echo.
echo Your audio has now been downloaded.
ping localhost -n 3 >nul
exit

另外,请记住,它还使用ffprobe.exeffmpeg.exe(它们都与youtube dl.exe位于同一文件夹中

打开命令提示符窗口并在那里运行
cmd/?
。此命令输出Windows命令处理器的帮助。在最后一段的最后一个帮助页上,会写入目录或文件名中的哪些字符或可执行文件和脚本的参数需要使用双引号。)es:space和
&()[]{}^=;!'+,`~

然后,字符
%
在批处理文件中具有特殊意义,因为它标记环境变量的开始和结束。若要将
%
指定为文字字符,必须用一个以上的
%
转义

在命令提示窗口中,运行
set
,您将在计算机上显示用户帐户的标准环境变量。其中一个标准环境变量是USERPROFILE,它保存当前用户配置文件文件夹的路径,例如包含子文件夹
Desktop

现在,让我们查看批处理文件中的以下行:

youtube-dl.exe --extract-audio --audio-format mp3 --output C:\Users\*******\Desktop\(ext)s.%(ext)s %audio%
这里最好使用对
桌面
目录的环境变量USERPROFILE的引用。用户帐户名可能包含空格字符,因此建议将路径用双引号括起来。接下来是括号和一个百分号,它们肯定需要双引号s并避开百分号

存储在环境变量
audio
中的URL不能包含空格字符,因为在URL中,空格字符必须用%20编码。但是,这个单一的百分号再次导致Windows命令处理器解释该行时出现问题。解决方案是使用延迟扩展

让我们看看这个批处理代码:

@echo off
setlocal EnableDelayedExpansion
set "ToolPath=%~dp0"
cd /D "%USERPROFILE%\Desktop"
:audio
cls
echo.
echo.
echo Your audio will be downloaded and saved as a .mp3 format
echo.
echo.
set /P "audio=Enter audio URL here: "
cls
"%ToolPath%youtube-dl.exe" --extract-audio --audio-format mp3 --output "%USERPROFILE%\Desktop\(ext)s.%%(ext)s" "!audio!"
pause
cls
echo.
echo.
echo.
echo.
echo Your audio has now been downloaded.
%SystemRoot%\System32\ping.exe 127.0.0.1 -n 4 >nul
endlocal
exit /B
批处理文件首先创建所有环境变量的本地副本,启用延迟变量扩展,并记住当前工作目录

接下来,包含批处理文件和此批处理文件使用的其他可执行文件的目录路径被分配给变量
ToolPath
。在命令提示窗口中运行
call/?
,以获取有关
%~dp0
的详细信息(参数0的驱动器和路径-批处理文件-始终以反斜杠结尾)

然后,当前目录将更改为当前使用的用户帐户的
桌面
目录,该帐户与启动批处理文件的驱动器无关。有关此命令及其参数的详细信息,请在命令提示符窗口
cd/?
中运行

带有
youtube dl.exe
的行已更改,因为现在使用完整路径调用可执行文件(因为当前工作目录现在是用户的
桌面
目录)。此外,输出目录现在用双引号括起来,还使用环境变量USERPROFILE,用一个以上的
%
转义一个百分号,URL现在用双引号引用,使用延迟展开(感叹号代替百分号)。在命令提示窗口中运行
set/?
,以获取有关延迟扩展的帮助和详细信息

对于3秒的超时,命令PING上使用的值必须为4,因为第一次PING总是立即成功

命令ENDLOCAL导致丢弃带有环境变量的表的本地副本(
ToolPath
在此行后不再定义,其他变量的所有更改都丢失),恢复延迟扩展的以前值(很可能在默认情况下将其关闭为未启用)和命令扩展名(默认情况下很可能仍处于启用状态)以及恢复以前的工作目录(如果双击启动,则很可能是批处理文件的路径)


注意:我没有测试提供的批处理文件,因为我没有安装
youtube dl.exe

打开命令提示符窗口并在那里运行
cmd/?
。此命令输出Windows命令处理程序的帮助。在最后一段的最后一个帮助页上,会写入目录中的哪些字符、文件名或ex的参数ecutable和脚本需要使用双引号:空格和
&()[]{}^=;!'+,`~

然后,字符
%
在批处理文件中具有特殊意义,因为它标记环境变量的开始和结束。若要将
%
指定为文字字符,必须用一个以上的
%
转义

在命令提示窗口中,运行
set
,您将在计算机上显示用户帐户的标准环境变量。其中一个标准环境变量是USERPROFILE,它保存当前用户配置文件文件夹的路径,例如包含子文件夹
Desktop

现在,让我们查看批处理文件中的以下行:

youtube-dl.exe --extract-audio --audio-format mp3 --output C:\Users\*******\Desktop\(ext)s.%(ext)s %audio%
这里最好使用对
桌面
目录的环境变量USERPROFILE的引用。用户帐户名可能包含空格字符,因此建议将路径用双引号括起来。接下来是括号和一个百分号,它们肯定需要双引号s并避开百分号

存储在环境变量
audio
中的URL不能包含空格字符,因为在URL中,空格字符必须用%20编码。但是,此单一的百分号会再次在URL上造成问题