Batch file 从用户bat文件生成一个带有询问URL的文本文件,CMD是否一直关闭?

Batch file 从用户bat文件生成一个带有询问URL的文本文件,CMD是否一直关闭?,batch-file,cmd,Batch File,Cmd,我试图通过从用户处获取输入并更改最后几个前缀来创建4个URL: @echo off type bot.txt set /p id="Enter the ip adress:" 链接将如下所示: https://live.star.com/hls/live/2004211/2020/hin/15mindvr1440006161q6nli0p96c19january2020 完整的URL应该如下所示: https://live.star.com/hls/live/2004211/2020/hin

我试图通过从用户处获取输入并更改最后几个前缀来创建4个URL:

@echo off
type bot.txt
set /p id="Enter the ip adress:"
链接将如下所示:

https://live.star.com/hls/live/2004211/2020/hin/15mindvr1440006161q6nli0p96c19january2020
完整的URL应该如下所示:

https://live.star.com/hls/live/2004211/2020/hin/15mindvr1440006161q6nli0p96c19january2020/master_1.m3u8|user-agent=KAIOS/2.0
其中master_1将是master_2、master_3和master_4

我希望这种情况发生,并保存在一个文本文件! 但是,echo命令也没有给我结果

set /p id="Enter the ip adress:"
echo Link 1 : %id%^
master_1.m3u8|user-agent=KAIOS/2.0
这使CMD不断崩溃

有没有办法让这一切自动化


谢谢

因此,用户不会输入IP地址作为预先设置的提示文本,而是输入一个URL,该URL可以包含
%
&
|
以及其他对Windows命令处理器处理批处理文件具有特殊意义的字符
cmd.exe

我建议使用以下批处理文件:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

:UserPrompt
set "InputURL="
set /P "InputURL=Enter the URL: "
if not defined InputURL goto UserPrompt
set "InputURL=%InputURL:"=%"
if not defined InputURL goto UserPrompt

setlocal EnableDelayedExpansion
if not "!InputURL:~-1!" == "/" set "InputURL=!InputURL!/"
set "InputURL=!InputURL!master_1.m3u8|user-agent=KAIOS/2.0"
echo Link 1 : !InputURL!
endlocal

endlocal
echo/
pause
在提示用户之前,未明确定义环境变量
InputURL

用户可以只按RETURN键或ENTER键,而无需输入任何内容。在这种情况下,在提示用户之前,环境变量
InputURL
仍未定义为显式未定义。如果在提示用户之前定义它,它将保留其当前值

第一个IF条件只是检查用户是否键入了字符串,如果用户没有输入任何内容,则再次提示用户

接下来,从用户输入的字符串中删除所有
。如果用户只输入了一个或多个
,而没有输入其他内容,则此操作可能导致执行
设置“InputURL=“
”,因此环境变量
InputURL
将再次不再定义。因此,如果用户只是有意或错误地输入了一个或多个
,系统会再次提示用户

变量名
InputURL
的左双引号和末尾的双引号在这里非常重要。它确保第一个(也是唯一的一个)command
set
的参数字符串用双引号括起来。因此,Windows命令处理器将双引号参数字符串中的
&
|
等字符解释为文字字符,而不是运算符

然后是enabled,它推送命令扩展(enabled)和延迟扩展(disabled)的当前状态以及当前目录和堆栈上的所有环境变量,然后再启用延迟扩展。所有进一步的命令都将使用一组新的环境变量执行,直到
endlocal
cmd.exe
执行

使用延迟扩展可以安全地进一步处理用户输入字符串,因为用户输入字符串在执行之前不再修改批处理文件的命令行,就像使用
%InputURL%
而不修改批处理文件的文件内容一样

如果用户输入字符串未以
/
结尾,则在这个临时新环境中,接下来将选中此项,在这种情况下,斜杠将附加到用户输入字符串

接下来是包含重定向运算符
|
的固定字符串,由于位于双引号参数字符串中,因此此处将其解释为文字字符。因此,无需使用
^
转义运算符,因为在命令
集合
的参数字符串未包含的情况下,这是必要的d,用双引号括起来,与此处使用
左撇变量名完全相同。分配给变量的等号和字符串值之间的
在此处不起作用。有关原因,请参见示例

命令
echo
用于输出修改后的URL以及使用延迟扩展的附加文本,以便能够在不使用
的情况下输出字符串“
,因为
echo
也会输出双引号

另见:

使用
endlocal
还原以前的环境,这不仅会导致禁用延迟扩展,就像在
setlocal enabledayedexpansion
之前一样,而且还会还原命令扩展(未修改)的状态,即当前目录(未修改)以及前面列出的环境变量及其值。这意味着环境变量
InputURL
再次具有字符串值,而不需要在
setlocal EnableDelayedExpansion
endlocal
之间进行一到两次修改

最后一个
endlocal
仅在启动此批处理文件之前显式恢复环境

最后,由于到达批处理文件的末尾,系统会提示用户按任意键查看输出并离开批处理文件处理

另见:

  • 关于Microsoft的文章

竖条,
|
是一个有特殊用途的字符。为了告诉解析器忽略该特殊用法,您需要使用插入符号对该字符进行转义,
^
。例如,
master_1.m3u8^| user agent=KAIOS/2.0
非常感谢@非常感谢您,先生!对于这么多的信息,现在我的bat文件运行顺利!