我认为标题是不言自明的,所以我只是粘贴我想到的代码。
set /p ms=%scmd%
if "%ms%" == "color *" %ms%
if "%ms%" == "title *" %ms%`
我要做的是检测用户是否“颜色”和其他东西,检测“颜色”部分并执行命令。 “标题”也是如此。
看起来“*”在这里不起作用,我认为没有其他方法可以做到这一点。有什么想法吗?
编辑:忽略%scmd%的事情。
编辑2:最后的样子:
set /p ms=%scmd%
echo %ms%|findstr /b /i /L /c:"color " >nul
if not errorlevel 1 %ms% & goto settings
echo %ms%|findstr /b /i /L /c:"title " >nul
if not errorlevel 1 %ms%`
感谢Magoo。
答案 0 :(得分:2)
echo %ms%|findstr /b /i /L /c:"color " >nul
if not errorlevel 1 %ms%
echo
将ms
中的字符串发送到findstr
,该字符串在开头/L
文字字符串/c:"this string"
/b
{ {1}}不区分大小写。
/i
会导致>nul
的输出,否则会将其发送到控制台无处
如果找到该字符串,findstr
将被设置为0,如果不是,则设置为1
由于errorlevel
表示“如果错误级别为n 或大于n ,则”如果不是错误级别1“则表示”如果错误级别为零“
答案 1 :(得分:1)
如果您想测试用户输入的第一个单词是列表中多个单词之一,那么您可以使用此方法:
@echo off
setlocal EnableDelayedExpansion
rem Define the list of valid words; enclose each one by / delimiters
set "words=/color/title/"
set /p ms=%scmd%
rem Take the first word in %ms%
for /F %%a in ("%ms%") do (
rem If such a word is in the list, execute the command
if "!words:/%%a/=!" neq "%words%" %ms%
)
即使用户输入前导空格(即" color 0a"
)并允许添加更多只修改一行的命令,此方法仍然有效。
答案 2 :(得分:0)
由于要采取的操作是相同的,因此可以使用带有正则表达式和条件执行的findstr而不是使用errorlevel。
&&
在前一个命令没有错误时执行(findstr确实匹配)set /p ms=%scmd%
Echo:%ms%|findstr /i "^color ^title" >Nul 2>&1 && %ms%