使用IF在批处理文件中检测更多单词和其他内容

时间:2017-04-09 14:35:09

标签: batch-file

我认为标题是不言自明的,所以我只是粘贴我想到的代码。

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

3 个答案:

答案 0 :(得分:2)

echo %ms%|findstr /b /i /L /c:"color " >nul
if not errorlevel 1 %ms%

echoms中的字符串发送到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默认情况下使用正则表达式,并且空格用“条件”区分两个正则表达式
  • 插入符号在开头
  • 处固定正则表达式
  • &&在前一个命令没有错误时执行(findstr确实匹配)
set /p ms=%scmd%
Echo:%ms%|findstr /i "^color ^title" >Nul 2>&1 && %ms%