Findstr 未能找到字符串 "Failures: 0"

Findstr failing to find string "Failures: 0"

我正在 Windows 机器上编写一个小的批处理脚本,用于自动下拉失败消息和屏幕截图。

我已经到了这样的地步,一旦我有了 url 的列表,我就可以得到我想要的。但是,我目前需要手动创建这些 url 列表。我使用的信息在一个日志文件中,其中包含服务器 运行 一组测试的控制台输出,并以以下形式出现:

E:\foo\bar\three\tall\cats\testRunOutput\foobar\foosball\dogstest\Login.html
Successes: 1, Failures: 0

E:\foo\bar\three\tall\cats\testRunOutput\foodbarn\catdog\testoid\ReLogin.html
Successes: 0, Failures: 1

E:\foo\bar\three\tall\cats\testRunOutput\foobar\topdog\dogstest\Login.html
Successes: 1, Failures: 4

我需要的是任何包含非零故障的行上方的行(例如 Failures: 后跟任意数量的非零数字)。

我目前的方法是使用以下方法删除任何包含 "Failures: 0" 的行:

findstr /v "Failures: 0" consoleText.txt > foo\bar\failures.txt

然后删除任何包含 'failures: [digits]' 的行上方的行。一旦我有了一个包含这些行的文件,其结构如下:

E:\foo\bar\three\tall\cats\testRunOutput\foodbarn\catdog\testoid\ReLogin.html
E:\foo\bar\three\tall\cats\testRunOutput\foobar\topdog\dogstest\Login.html

删除每行的前 41 个字符应该相当简单,插入 url http://build-server:1111/job/foo/bar/testRunOutput/ 的开头,最后翻转每个斜线。

我真的只需要帮助

findstr /v "Failures: 0" consoleText.txt > foo\bar\failures.txt

但我想 post 其余部分提供上下文或获取额外的代码,以防有人以前经历过这个。

很抱歉,如果这是一个基本问题,但我主要在 Mac 和 Linux 系统上完成命令行工作。

经过进一步的研究和一些,呃,创造性的 google 搜索,我发现我之前尝试过的东西就足够了。该行最终如下所示:

findstr /v /c:"Failures: 0" consoleText.txt > foo\bar\failures.txt

您也可以使用 find 代替 findstrfind 像处理任何其他字符一样处理 space:

find "Failures: 0"

但你真正想要的是:

What I need is the lines above any line containging a nonzero failure (eg. 'Failures: ' followed by any number of nonzero digits).

"Any number of nonzero digits"可以翻译成"anything that starts with a nonzero digit"

findstr /r /c:"Failures:\ [1-9]" 

/r:使用 Regex(findstr 支持非常小的 Regex 子集)
\:取下面的char (space) literal
[1-9] 任何数字 1,2,3,...9

问题是,要打印的行不是要计算的行。使用变量(!line!)保留最后一行:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%a in (t.txt) do (
  echo %%a|findstr /r /c:"Failures:\ [1-9]" >nul  && echo !line!
  set line=%%a
)

在循环的每次迭代中,您有 !line! = 最后处理的行和 %%a 当前行。诀窍是,在循环的最后设置 line。)