将变量与批处理中的另一个变量的一部分匹配

时间:2013-09-27 17:40:52

标签: string batch-file match

我想将变量与批量中另一个变量的部分内容进行匹配。这是我想要做的一些伪代码。

set h= Hello-World
set f= This is a Hello-World test

if %h% matches any string of text in %f% goto done
:done
echo it matched

有人知道我怎么能做到这一点吗?

3 个答案:

答案 0 :(得分:2)

基于this answer here,您可以使用FINDSTR命令使用/C开关比较字符串(从链接的答案修改,因此您不必单独使用用于比较字符串的批处理文件:

@ECHO OFF

set h=Hello-World
set f=This is a Hello-World test

ECHO Looking for %h% ...
ECHO ... in %f%
ECHO.

echo.%f% | findstr /C:"%h%" 1>nul

if errorlevel 1 (
  ECHO String "%h%" NOT found in string "%f%"!
) ELSE (
  ECHO String "%h%" found in string "%f%"!
)

ECHO.    

PAUSE

答案 1 :(得分:2)

如果满足以下条件:

  • 搜索不区分大小写
  • 搜索字符串不包含=
  • 搜索字符串不包含!

然后你可以使用:

@echo off
setlocal enableDelayedExpansion
set h=Hello-World
set f=This is a Hello-World test
if "!f:*%h%=!" neq "!f!" (
  echo it matched
) else (
  echo it did not match
)

搜索字词前面的*只需要允许搜索字词以*开头。

可能还有一些涉及引号和特殊字符的其他情况,其中上述情况可能会失败。我相信以下内容应该解决这些问题,但最初的限制仍然适用:

@echo off
setlocal enableDelayedExpansion
set h=Hello-World
set f=This is a Hello-World test
for /f delims^=^ eol^= %%S in ("!h!") do if "!f:*%%S=!" neq "!f!" (
  echo it matched
) else (
  echo it did not match
)

答案 2 :(得分:1)

这是另一种方式:

@echo off
set "h=Hello-World"
set "f=This is a Hello-World test"
call set "a=%%f:%h%=%%"
if not "%a%"=="%f%" goto :done
pause
exit /b
:done
echo it matched
pause