Batchfile - findstr找不到字符串

时间:2018-02-21 08:12:23

标签: batch-file cmd findstr

所以我正在运行findstr命令来搜索文件以获取以下文本

[errorCode: 0]

并使用/ v选项输出不包含此字符串的行。以下是我正在使用的代码

@findstr /i /v "\[errorCode: 0\]" file1.log >>file2.txt

然而,这只是简单地将file1的所有内容放到文件2.我在哪里错了?

1 个答案:

答案 0 :(得分:1)

使用以下命令行:

@%SystemRoot%\System32\findstr.exe /I /L /V /C:"[errorCode: 0]" file1.log >>file2.txt

由于[errorCode: 0]/L,这会明确显示/C的字面值字符串搜索。

使用 FINDSTR 时,其正则表达式支持与其他应用程序和解释器中的正则表达式支持无法比较,建议您在命令提示符窗口中运行findstr /?来阅读其简要帮助另外还有:

命令行

@findstr /i /v "\[errorCode: 0\]" file1.log >>file2.txt

未产生预期的输出,因为刚引用双引号的搜索字符串中的空格字符被解释为多个搜索字符串之间的分隔符。所以 FINDSTR 正在使用此命令行搜索包含字符串[errorCode:或字符串0]的行,使用不区分大小写的正则表达式查找而不是包含字符串的行{ {1}}并输出所有不包含这两个字符串的行。

此命令行也可以写为:

  • 文字而非正则表达式查找对行中[errorCode: 0] OR [errorCode不区分大小写的搜索,并输出所有行包含这两个字符串中的任何一个:

    0]
  • 文字而不是正则表达式在行中明确查找对@findstr /I /L /V "[errorCode 0]" file1.log OR [errorCode不区分大小写的搜索并输出所有行不包含这两个字符串中的任何一个:

    0]
  • 常规表达式在一行中明确查找对@findstr /I /V /C:"[errorCode:" /C:"0]" file1.log OR [errorCode不区分大小写的搜索,并输出所有不包含任何一行的行这两个字符串:

    0]

例如@findstr /I /R /V /C:"\[errorCode:" /C:"0\]" file1.log 包含:

file1.log

上面三个命令行的输出和有问题的初始命令行是:

Line 1: [errorCode: 0]
Line 2: [CodeError: 0]
Line 3: [errorCode: 1]
Line 4: [noErrCode: 1]

但是这个例子的预期输出是:

Line 4: [noErrCode: 1]

这是运行以下命令行之一的输出:

Line 2: [CodeError: 0]
Line 3: [errorCode: 1]
Line 4: [noErrCode: 1]

@findstr /I /V /C:"[errorCode: 0]" file1.log @findstr /I /V /C:"\[errorCode: 0\]" file1.log @findstr /I /L /V /C:"[errorCode: 0]" file1.log @findstr /I /L /V /C:"\[errorCode: 0\]" file1.log @findstr /I /R /V /C:"\[errorCode: 0\]" file1.log 是文字和正则表达式字符串中的转义字符。但是在文字字符串中,只有反斜杠\本身和双引号字符\必须使用反斜杠进行转义。在正则表达式字符串中,反斜杠留给具有特殊正则表达式的字符,这意味着将下一个字符解释为文字字符。

我建议使用 FINDSTR

  1. 指定一个或多个字符串 c ompare,始终使用"(或使用/C:"..."),而不是只使用/C:...来获取空格搜索字符串始终被解释为空格字符。
  2. l 迭代始终指定"..."或为 r egular表达式指定/L
  3. 然后,大多数用户都知道从其他应用程序或解释器中搜索字符串,并且不知道 FINDSTR 解释字符串以在双引号中查找的具体规则。

    >