我正在Windows机器上编写一个小批量脚本,用于自动下载失败消息和屏幕截图。
我已经达到了这样的程度:一旦我有了一个网址列表,我就能得到我想要的东西。但是,我目前需要手动创建这些网址列表。我使用的信息是一个日志文件,其中包含运行一组测试的服务器的控制台输出,其格式如下:
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:
后跟任意数量的非零数字)。
我目前的做法是删除包含"失败:0"使用:
findstr /v "Failures: 0" consoleText.txt > foo\bar\failures.txt
然后剥离包含'失败的任何行上方的行:[数字]'。一旦我有一个包含这些行的文件,结构如下:
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个字符应该相当简单,插入网址http://build-server:1111/job/foo/bar/testRunOutput/
的开头,最后翻转每个斜线。
我真的只需要帮助
findstr /v "Failures: 0" consoleText.txt > foo\bar\failures.txt
但我想发布剩下的内容以提供上下文或获取额外的代码以防有人在此之前完成此操作。
对不起,如果这是一个基本问题,但我主要在Mac和Linux系统上完成命令行工作。
答案 0 :(得分:1)
您也可以使用find
代替findstr
。 find
像任何其他字符一样处理空格:
find "Failures: 0"
但你真正想要的是什么:
我需要的是任何包含非零故障的线路上方的线路 (例如,'失败:'后跟任意数量的非零数字。)
"任意数量的非零数字"可以用"任何以非零数字"
开头的内容翻译findstr /r /c:"Failures:\ [1-9]"
/r
:使用正则表达式(findstr
支持正则表达式的一小部分)
\
:取以下字符(空格)字面值
[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
。)
答案 1 :(得分:0)
经过进一步的研究和一些,呃,创造性的谷歌搜索,我发现我之前尝试的东西就足够了。该行最终如下:
findstr /v /c:"Failures: 0" consoleText.txt > foo\bar\failures.txt