批处理崩溃没有错误,我怎样才能找到问题?

Batch Crashes Without Error, How Can I Find The Problem?

提问人:Daniel Askew 提问时间:10/31/2023 最后编辑:CompoDaniel Askew 更新时间:10/31/2023 访问量:56

问:

当我使用测试链接(例如 or 甚至)时,一切都在工作,它会继续到下一行。但是,当我输入实际的 YouTube URL 时,CMD 崩溃没有给出任何错误。我甚至转过身去看看发生了什么,但它只会崩溃。youtubeyoutube.comhttps://youtube.com/testECHO on

@ECHO OFF
 
:back1
echo Please enter a file name, make sure to add ".webm" to the end for formatting reasons:
set/p "file=>"
if x%file:.webm=%==x%file% goto linkER
goto back2
 
:linkER
cecho {0C}INVALID ENTRY it is CRITICAL to get this part right! {#}
goto back1
 
:back2
echo Please paste the YouTube link:
set/p "link=>"
if %link%==0 (goto Invalid)
if x%link:youtube=%==x%link% goto Youtube
goto start_time
 
:Invalid
cecho {0C}INVALID ENTRY {#}
goto back2
 
:Youtube
cecho {0C}INVALID ENTRY: Must contain "Youtube" {#}
goto back2

这应该是理解重点所需的唯一代码块,尽管还有更多。

有没有人知道它可能是什么或我可以尝试什么?

if-statement 批处理文件

评论

2赞 Mofi 10/31/2023
批处理文件是一个文本文件,其中包含要由 Windows 命令处理器处理的命令行。批处理文件不会因此而崩溃。 可能会因为是带有 CPU 指令的程序而崩溃。请阅读调试批处理文件,了解如何从命令提示符窗口中运行批处理文件,而不是在 Windows 文件资源管理器中双击它,而不是在顶部查看哪个命令行在执行时导致语法错误,并在退出批处理之前输出错误消息。cmd.execmd.exe@ECHO OFFcmd
1赞 Mofi 10/31/2023
第一个语法错误发生在命令(参数 0)与其选项(参数 1)之间缺少空格的行中。其他语法错误包括 。这不是已知的 Windows 命令。它应该最有可能.我建议也阅读我的答案 如何阻止 Windows 命令解释器在不正确的用户输入上退出批处理文件执行?set/p "file=>"set/pcechoecho
1赞 Mofi 10/31/2023
下面应该插入命令行。下一行应从 修改为 。接下来的两行应该是从用户输入字符串中删除所有内容,如果用户只输入了一个或多个 .命令行应替换为:back1echoset "file="set/p "file=>"set /P "file=>" || goto linkERset "file=%file:"=%""if not defined file goto linkER"if x%file:.webm=%==x%file% goto linkERfor %%G in ("%file%") do if /I not "%%~xG" == ".webm" if "%%~xG" == "" (set "file=%file%.webm") else goto linkER
0赞 Mofi 10/31/2023
FOR 命令行的第一个 IF 条件在用户输入字符串上为 false,字符串结尾不区分大小写,在这种情况下,此命令行上不执行任何其他操作。但是,如果用户输入字符串区分大小写,则执行第二个 IF,这将检查用户输入文件名是否没有文件扩展名。如果是这种情况,则会追加到文件名,并在下一个命令行上继续批处理。否则,输入文件名具有不同的文件扩展名,并且由于以下原因继续批处理。.webm.webm.webmlinkEr
0赞 Mofi 10/31/2023
第二个用户提示 URL 的编码应类似,以使批处理文件因错误或故意错误而对用户输入错误并安全进行故障保护。 显然应该输出带有颜色的消息。如果目录或批处理文件中是批处理文件,请替换为批处理文件或根据批处理文件的文件扩展名进行替换。如果 is a executable in in of 批处理文件的目录,请替换为 以使批处理文件独立于当前目录所在的目录工作。cechocechocechocall "%~dp0cecho.bat"call "%~dp0cecho.cmd"cechocecho"%~dp0cecho.exe"

答:

0赞 JoyNa 10/31/2023 #1

一个可能的问题可能是处理真实 YouTube URL 的方式。尝试更改检查链接/URL 是否存在的行。这将确保它继续进行 .start-time

您可能想要更改此行:

if x%link:youtube=%==x%link% goto Youtube

像这样:

if not "%link:youtube=%"=="" goto start_time

如果这有什么不同,请告诉我。

评论

0赞 Daniel Askew 11/1/2023
嗨,JoyNa!感谢您在这里的输入,但我试图在这个等式中做的是从字符串“link”中删除 prase “youtube”,然后将其与原始链接字符串进行比较,看看原始链接字符串是否在任何地方都有“youtube”。这样做的原因是为了检查它是否是 YouTube URL