我想将变量与批量中另一个变量的部分内容进行匹配。这是我想要做的一些伪代码。
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
有人知道我怎么能做到这一点吗?
答案 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