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
代替 findstr
。 find
像处理任何其他字符一样处理 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
。)
我正在 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
代替 findstr
。 find
像处理任何其他字符一样处理 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
。)