Batch file 如何使用youtube dl批量创建youtube下载器gui

Batch file 如何使用youtube dl批量创建youtube下载器gui,batch-file,Batch File,这就是我目前的处境: cls @echo off title youtube downloader :downloader echo youtuber downloader!!! pause cls echo please put the link: set /p site= echo Do you want to download %site% as mp3? set /p choice if %choice%== yes goto mp3 if %choice%== no goto mp4

这就是我目前的处境:

cls
@echo off
title youtube downloader
:downloader
echo youtuber downloader!!!
pause
cls
echo please put the link:
set /p site=
echo Do you want to download %site% as mp3?
set /p choice
if %choice%== yes goto mp3
if %choice%== no goto mp4

:mp4
@echo off
cls
C:\Users\Andly\Documents\youtube-dl.exe %site%
echo ok
pause
end

:mp3
@echo off
cls
C:\Users\Andly\Documents\youtube-dl %site% --audio-format mp3
echo lol ok
pause
end
我很确定我可以在中选择链接

echo please put the link:
set /p site=
^^^ 然而,它崩溃的权利,当我把一个网站


有人知道我做错了什么吗?

这将有助于展示您试图下载的页面示例。 一些youtube链接包含符号“&”,命令行将其解释为指示同一行上的新命令。这可能是导致代码失败的原因。 “&”不是唯一可以中断代码执行的符号

为了进一步澄清,以下是一个站点地址示例:

https://www.youtube.com/watch?v=8JEhYPOHBeU&list=PL3EtSYnnXk-rMpHWZ-B6gsDjiydt8JijL&index=2&t=0s
这是命令尝试展开变量站点时发生的情况:

C:\Users\name\folder>ECHO https://www.youtube.com/watch?v=8JEhYPOHBeU  & 
list=PL3EtSYnnXk-rMpHWZ-B6gsDjiydt8JijL  & index=2  & t=0s
https://www.youtube.com/watch?v=8JEhYPOHBeU
'list' is not recognized as an internal or external command,
operable program or batch file.
'index' is not recognized as an internal or external command,
operable program or batch file.
't' is not recognized as an internal or external command,
operable program or batch file.

当变量展开时,只要变量中遇到“&”,command就会尝试将它后面的内容作为新命令读取。

输入链接中存在潜在有毒字符的大多数问题都可以通过将该输入括在双引号中来解决,正如我已经评论过的那样。除此之外,还需要考虑一个特殊情况,即在批处理文件中,任何
%
字符都需要加倍

下面是一个简单的例子,可以解释包含有毒字符的链接可能出现的大多数问题:

@Echo关闭
标题YouTube下载程序
SetLocal DisableDelayedExpansion
回声YouTube下载程序!!!
:阿斯库里
设置“URI=”
设置/P“URI=请在此处输入您的YouTube链接>”
如果未定义URI ClS&转到AskURI
选择/M“您想以MP3格式下载吗”
如果“%ErrorLevel%”==“1”(调用:GetDownload--音频格式mp3),则调用:GetDownload
回音完成
暂停
后藤:EOF
:GetDownload
SetLocal EnableDelayedExpansion
%UserProfile%\Documents\youtube dl.exe”“!URI:%%=%%%!”%*
退出/B

由于上面的示例使用了
choice.exe
而不是健壮性较差的
Set/p
方法,它绕过了代码中的一个问题,即使用
Set/p choice
而不是
Set/p choice=

您是否尝试过使用
%site%
而不仅仅是
%site%
?是的,这是我尝试的第一件事。这样做似乎不合理,因为我创建了多个批处理程序,但没有使用
“%input%”
您怀疑的两行代码是无辜的。这是
set/p选项
,它通过语法错误中断了脚本。(除了答案涵盖的问题)是的!这是
set“site=“
你能给我解释一下你的意思吗,因为我想我没有使用“&”符号,这是批处理。我正在使用可执行的youtube dl,这是一个命令行应用程序,可以让您通过命令提示符下载youtube视频(正如我在标题中所说的)。我正在尝试将youtube dl的程序添加到我的命令行中,使其更易于使用。鉴于您所描述的时间,您使用的链接中可能存在问题。Youtube链接/web地址可以包含诸如“&”之类的符号,如果将其设置为变量的一部分,则可能会导致问题。如果你能举例说明你正在使用的网址,那会很有帮助。哦,我明白你的意思了。你不需要放置索引或0,除非你想要一个特定的部分,我现在并没有让它变得如此复杂,也许以后会!谢谢添加集合“thing=”Set/p“thing=question”成功了!不过,我已经开始了一个新的thred->请看一看,谢谢@还有Lykwan,我看到了一个新问题,我所能想到的就是为什么要使用它,因为上面的问题好多了。尤其是当您可能只需要更改第11行的
call
参数时。噢!我刚刚看到了它,它是一个重定向,所以我使用它,所以当出现问题时,它会回到以前!