1

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

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

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

提前谢谢!

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

2 回答 2

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 文件可能会失败。

于 2014-06-02T14:58:19.570 回答
1

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

最棘手的部分是隔离带引号的字符串。我的REPL.BAT 正则表达式搜索和替换实用程序是一个不错的选择。它是一个混合 JScript/批处理脚本,可以在 XP 以后的任何现代 Windows 机器上本地运行。

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
于 2014-06-02T15:31:25.887 回答