Batch file 从用户bat文件生成一个带有询问URL的文本文件,CMD是否一直关闭?
我试图通过从用户处获取输入并更改最后几个前缀来创建4个URL: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
@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
的左双引号和末尾的双引号在这里非常重要。它确保第一个(也是唯一的一个)commandset
的参数字符串用双引号括起来。因此,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文件运行顺利!