检查文本文件中的每个字符串是否有子串

时间:2014-06-02 08:02:35

标签: string batch-file substring pattern-finding

我搜索了很长时间,并没有找到对我的问题有用的东西。这可能听起来很简单,如果有人能帮助我,我会很高兴:

我想编写一个批处理脚本,它证明文本文件中的每个字符串是否包含特定的子字符串。如果是这种情况,则应打印出包含此子字符串的整个字符串。 我正在寻找的字符串被双引号括起来。

我的代码只适用于我的文本文件的所有行,但我需要它用于所有字符串。

提前thx!

@echo off
setlocal enableextensions enabledelayedexpansion
    for /f "delims=" %%A in ('findstr "somesubstring" "textfile.txt"') do (
        echo %%A 
    )

2 个答案:

答案 0 :(得分:2)

也许这就是你想要的?

@echo off
setlocal enabledelayedexpansion

set "substring=somesubstring"
for /f "delims=" %%A in ('findstr "%substring%" "textfile.txt"') do (
   for %%B in (%%A) do (
      set "string=%%~B"
      if "!string:%substring%=!" neq "!string!" echo %%B
   )
)

如果"字符串"之外的字符,此Bath文件可能会失败(未用引号括起来)是特殊的批处理字符。

答案 1 :(得分:1)

我首先会使用工具在一行上隔离每个字符串。然后,您可以使用FINDSTR仅返回包含子字符串

的引用行

最棘手的部分是隔离引用的字符串。我的REPL.BAT regex search and replace utility是个不错的选择。它是一个混合的JScript /批处理脚本,可以在任何现代Windows机器上从XP开始本地运行。

type "textfile.txt" | repl (\q.*?\q) \r\n$1\r\n x | findstr /x ^"\".*substring.*\"^"

如果你想看到你的字符串而不附上引号,那么:

for /f delims^=^ eol^= %%A in (
  'type "textfile.txt" ^| repl (\q.*?\q) \r\n$1\r\n x ^| findstr /x ^"\".*substring.*\"^"'
) do echo %%~A