检查用户输入是不是包含子字符串

Posted

技术标签:

【中文标题】检查用户输入是不是包含子字符串【英文标题】:Check if userinput contains substring检查用户输入是否包含子字符串 【发布时间】:2020-07-12 11:48:42 【问题描述】:

您好,请帮我解决这个问题! 我想检查用户输入的 URL 是否包含定义的 SUBSTRING如果是的,我想转长 否则 转短

谢谢!

 @echo off


setlocal enabledelayedexpansion enableextensions

SET /P "URL= Input the link of the video: "



SET "SUBSTRING=?filter=archives&sort=time"




ECHO !URL! | FINDSTR /C:"!SUBSTRING!">nul
IF ERRORLEVEL 1 (GOTO SHORT) ELSE GOTO LONG


:LONG
SET LINK=1
ECHO THIS IS A LONG LINK
ECHO "THE LINK NUMBER IS %LINK%"
ECHO !URL!
GOTO END



:SHORT
SET LINK=0
ECHO THIS IS A SHORT LINK
ECHO "THE LINK NUMBER IS %LINK%"
ECHO !URL!
GOTO END


:END
pause

【问题讨论】:

这四个X 实际上不在您的代码中,是吗? (另外,考虑到您使用set /p,我认为这是不是 dos @Stephan 它们在代码中是因为它们作为“分隔符”工作,如果我是对的,它们会阻止使用 & 或 ?作为命令,是的,这是一个批处理文件,我的错 所以你认为XFINDSTR 是一个有效的命令?删除它们 - 所有四个。并更改为SET "SUBSTRING=?filter=archives"(注意引号的位置) 我按照你的步骤进行操作,然后我保存了它,现在它给了我这个错误消息=timeThe system cannot find the file specified如果我输入这个https://www.twitch.tv/videos/578427308?filter=archives我现在非常非常困惑 加上当我尝试关闭它时,现在会给出一堆 "C^C^C^C^C^" 的我还更新了问题中的代码,如果有帮助 【参考方案1】:

正确使用双引号有助于解决一些问题。如果您也使用引号作为回声,则不需要使用延迟扩展。

@echo off

SET /P "URL=Input the link of the video:"

SET "SUBSTRING=?filter=archives"

ECHO "%URL%"|FINDSTR /C:"%SUBSTRING%">nul
IF ERRORLEVEL 1 (GOTO SHORT) ELSE GOTO LONG

:LONG
SET LINK=1
ECHO THIS IS A LONG LINK
ECHO "THE LINK NUMBER IS %LINK%"
GOTO END

:SHORT
SET LINK=0
ECHO THIS IS A SHORT LINK
ECHO "THE LINK NUMBER IS %LINK%"
GOTO END

:END
pause

更新显示批处理文件的执行。

C:\Users\Squashman\Desktop>test.bat
Input the link of the video:https://www.twitch.tv/videos/578427308?filter=archives&sort=time
THIS IS A LONG LINK
"THE LINK NUMBER IS 1"
Press any key to continue . . .

【讨论】:

我刚刚尝试了你给我的代码,由于某种原因,如果我输入 httpexamplehttpexample?filter=archives 它只是冻结了 cmd,为什么我试图关闭它它会用 @987654325 向命令窗口发送垃圾邮件@s 我想知道我的批处理文件是否从 C: 到 D: 有效,知道为什么吗? 它现在可以工作了,但是当我输入https://www.twitch.tv/videos/578427308?filter=archives&sort=time 时它仍然给出一个错误行,上面写着=timeThe system cannot find the file specified 我只需要使用部分输入作为命令来“逃避”的解决方案 @kisgaras,那么当您使用命令FINDSTR 并且在当前工作目录中还有一个名为FINDSTR 的批处理文件时,您认为会发生什么。我会给你一个提示。 除非您知道如何解决它,否则永远不要将您的批处理文件命名为与系统上的另一个可执行文件相同。【参考方案2】:

所以这是工作代码。我现在将提到我遇到的问题,以便其他人可以从中学习

    必须不启用setlocal enabledelayedexpansion 我必须在 SET 命令的变量周围使用引号 因为我禁用了 delayedexpansion,所以当我以后想在命令中使用变量时,必须使用百分比而不是感叹号

如果我错了,请纠正我,但这就是我在这些人的帮助下以及我自己通过反复试验得出的结论 我制作了这个列表并更新了代码,所以如果像我这样的新手卡住了,他们可以看看这篇文章。 再次感谢各位!

@echo off

SET /P "URL=Input the link of the video:"

SET "SUBSTRING=?filter=archives"

ECHO "%URL%"|FINDSTR /C:"%SUBSTRING%">nul
IF ERRORLEVEL 1 (GOTO SHORT) ELSE GOTO LONG

:LONG
SET LINK=1
ECHO THIS IS A LONG LINK
ECHO "THE LINK NUMBER IS %LINK%"
GOTO END

:SHORT
SET LINK=0
ECHO THIS IS A SHORT LINK
ECHO "THE LINK NUMBER IS %LINK%"
GOTO END

:END
pause

【讨论】:

以上是关于检查用户输入是不是包含子字符串的主要内容,如果未能解决你的问题,请参考以下文章

求字符串不同子串个数

PB中取字符串子串的函数是啥

华为OD机试 - 最长连续子串(Python)| 真题+思路+考点+代码+岗位

检查字符串是不是包含多个子字符串之一

PB中取字符串子串的函数是啥

如何检查字符串是不是包含int? -迅速