如何在cmd批处理文件中替换字符串变量中的字符串变量?

时间:2013-02-20 15:45:27

标签: batch-file cmd substring

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

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

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

非常感谢任何帮助!

谢谢!

4 个答案:

答案 0 :(得分: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%
)

答案 1 :(得分:4)

if "!VAR1:%VAR2%=!" neq "!VAR1!" echo It contains !VAR2!

答案 2 :(得分:3)

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

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

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

答案 3 :(得分: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
)