首页 > 解决方案 > 批处理文件:在字符串中查找字符串不起作用

问题描述

我尝试使用此处提到的答案:[Find Substring in String](批处理文件:查找子字符串是否在字符串中(不在文件中)

我尝试调整命令中提到的解决方案,以便将我的 SearchVal 保存在一个变量中,以便可以在运行时更改它。

最小的例子:

set searchVal="cde"
set str1="abcdef"
setlocal enabledelayedexpansion
if not "x!str1:%searchVal%=!"=="x%str1%" echo It contains my subs
endlocal
pause

在我看来,这个小批次应该显示字符串包含我的 subs,但是没有显示任何内容,我不知道为什么,因为我直接使用了应该工作的解决方案。

编辑

感谢这些命令,我​​发现了我的错误。在我目前的情况下,我查看文件夹中的文件并将文件名保存在数组中,同时执行 for 循环:

for /f "tokens=1 delims=" %%G in ('pathToFolder\*.properties /b') do (
if not "%%~G:%searchVal%=!"=="%%~G" echo It contains my subs !ID_Properties!
set filename[!ID_Properties!]=%%~G
set /a ID_Properties+=1
)

...其中 ID_properties 只是一个计数器,而 searchVal 我正在寻找我的字符串。有谁知道我如何以正确的方式在循环中使用 %%G 以便搜索像以前一样工作?

标签: batch-filecmdsubstring

解决方案


您的 for 循环语法不正确,它似乎是执行dir命令和循环文件之间的混合。我会坚持使用dircommand 选项并使用usebackq

@echo off
setlocal EnableDelayedExpansion

set searchVal=cde
set ID_Properties=0
for /f "usebackq tokens=1 delims=" %%G in (`dir pathToFolder\*.properties /b`) do (
    set file=%%G
    if not "!file:%searchVal%=!"=="!file!" (
      echo It contains my subs !ID_Properties!
      set filename[!ID_Properties!]=!file!
      set /a ID_Properties+=1
    )
)

仅当file包含您的searchVal;时才填充数组。不知道这是不是你的意图。


推荐阅读