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

Batch file 如何替换cmd批处理文件中字符串变量中的字符串变量?,batch-file,cmd,substring,Batch File,Cmd,Substring,我想看看一个字符串是否包含另一个字符串,其中两个字符串都是变量。基本上,它与相同,但有两个变量。使用将该解决方案应用于我的情况!VAR1和!VAR2(这些变量在FOR循环中声明)我尝试了: 不幸的是,它不起作用。任何帮助都将不胜感激。我还声明了setlocalenabledayedexpansion,以便访问变量 任何帮助都将不胜感激 谢谢 当我检查一个字符串是否存在于另一个字符串中时,我喜欢使用for循环,而不是if for /f "delims=" %%I in ('echo !VAR1!

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

不幸的是,它不起作用。任何帮助都将不胜感激。我还声明了
setlocalenabledayedexpansion
,以便访问变量

任何帮助都将不胜感激


谢谢

当我检查一个字符串是否存在于另一个字符串中时,我喜欢使用
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%
)

在我看来,这是最简单的方法

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

如果未找到,则将
&&
替换为
|

如Aacini和rojo所示,必须对两个变量使用不同的展开形式,内部为正常,外部为延迟

if "!VAR1:%VAR2%=!" neq "!VAR1!" echo It contains !VAR2!
但是,您可能正在设置变量的同一代码块中运行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
)

+1我没有意识到
neq
也可以处理字符串。酷。变量扩展搜索和替换始终不区分大小写。FINDSTR提供了区分大小写或不区分大小写的搜索选项。如果执行不区分大小写的搜索,我更喜欢IF方法-它要快得多。使用FINDSTR时不需要for/F。此外,如果
,您当前的FOR/F可能会打印多次!VAR1包含换行符。如果使用FOR/F,那么最好像感谢您的输入这样做。这个解决方案对我很有效,因为IF确实在设置变量的同一代码块中运行。
(
  :: Some code that sets the value of var2 
  ::
  for /f "delims=" %%A in ("!var2!") do if "!var1:%%A=!" neq "!var1!" echo It contains %%A
)