在DOS脚本中,有没有办法验证变量中是否存在字符串?

时间:2012-01-10 06:29:57

标签: windows powershell dos

在DOS脚本中,如果我有一个变量字符串,如何在该变量字符串中存在某个字符串的真或假? (我不想创建一个临时文件来完成这个。我知道如何做到这一点。)FIND.exe和FINDSTR.exe似乎都需要物理文件而不是变量。

我试过了,但它失败了:

C:\Users\me>findstr.exe "Program" %ProgramData%

3 个答案:

答案 0 :(得分:1)

如果您正在尝试使用库存Windows安装 - 我不认为这可以完成,因为您使用CMD.EXE描述最接近您将使用IF命令,但它没有不支持包含,它只包含以下运算符:

EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal

如果您可以使用这些操作符(而不仅仅是包含)来逃避您想要做的事情。您还可以使用FOR命令拆分字符串并测试每个元素的匹配项,尽管这看起来相当脆弱。

由于您已将其标记为PowerShell,因此我将继续讨论并假设PowerShell脚本解决方案也可以接受。如果是这种情况,那么解决方案很容易证明:

# create a variable $s with some string data
$s = "Some random program data"

# using String::Contains
if ($s.Contains("random")) { "Bingo" }

# using -like operator
if ($s -like "*random*") { "Bingo" }

# using the -match operator
if ($s -match "random") { "Bingo" }

注意:在PowerShell中,-contains运算符用于测试集合成员资格,而不是子字符串匹配。您需要在字符串对象或Contains-like运算符上使用-match方法来执行所需的模式匹配。

答案 1 :(得分:1)

在DOSTIPS论坛中找到了另一个想法:

set "str=-debug -verbose -normi -homedir -repo"
if "%str:-verbose=%" neq "%str%" (echo -verbose found) else (echo -verbose not found)

答案 2 :(得分:0)

而不是

C:\Users\me>findstr.exe "Program" %ProgramData%

echo %ProgramData% | findstr Program >nul
set RESULT=%ERRORLEVEL%

如果匹配,%ERRORLEVEL%将为0,否则为1。