2

我想看看一个字符串是否包含另一个字符串,其中两个字符串都是变量。基本上它与这个线程相同,但有两个变量。采用该解决方案并将其应用于我的情况,!VAR1!并且!VAR2!(这些变量在FOR循环中声明)我尝试了:

if not x!VAR1:!VAR2!=!==x!VAR1! ECHO It contains !VAR2!

不幸的是,它不起作用。任何帮助将不胜感激。我也声明SETLOCAL EnableDelayedExpansion了,所以我可以访问变量。

任何帮助将不胜感激!

谢谢!

4

4 回答 4

4

当我检查一个字符串是否存在于另一个字符串中时,我喜欢使用for循环而不是if.

for /f "delims=" %%I in ('echo !VAR1! ^| findstr /i /c:"!VAR2!"') do (
    echo !VAR1! contains !VAR2!
)

这具有不区分大小写匹配的额外好处。


如果您更喜欢保留 if 语句,请尝试使用中间变量以减少混淆。

set vt=!VAR1:%VAR2%=!
if x%vt%==x%VAR1% (
    echo %VAR1% remained the same after removing %VAR2%.  %VAR1% did not contain %VAR2%
)
于 2013-02-20T16:11:13.257 回答
4
if "!VAR1:%VAR2%=!" neq "!VAR1!" echo It contains !VAR2!
于 2013-02-20T17:15:38.177 回答
3

正如 Aacini 和 rojo 所展示的,您必须对两个变量使用不同的扩展,即正常内部和延迟外部。

但也许您在设置变量的同一代码块中运行 IF。现在你不能使用正常的扩展。解决方案是将内部变量转移到 FOR 变量。

(
  :: Some code that sets the value of var2 
  ::
  for /f "delims=" %%A in ("!var2!") do if "!var1:%%A=!" neq "!var1!" echo It contains %%A
)
于 2013-02-21T04:22:35.193 回答
3

这是我认为最简单的方法。

echo %VAR1% | find /i "%VAR2%" >nul && echo %VAR2% was found!

如果找不到,请替换&&为for。||

于 2013-02-20T16:54:00.540 回答