我有一个我正在使用的robocopy日志文件,我需要使用powershell提取摘要行。我遇到的问题是摘要的行数并不总是相同。
假设日志文件如下所示:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Tue Dec 01 06:55:11 2015
Source : C:\Source Path
Dest : E:\Destination Path
Files : *.*
Options : *.* /TEE /S /E /COPY:DAT /PURGE /MIR /NP /R:2 /W:2
------------------------------------------------------------------------------
List of files here
List of files here
List of files here
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 945 0 945 0 0 0
Files : 10118 4 10114 0 0 3
Bytes : 1.245 g 323.9 k 1.244 g 0 0 0
Times : 0:00:17 0:00:00 0:00:00 0:00:17
Speed : 5264920 Bytes/sec.
Speed : 301.261 MegaBytes/min.
Ended : Tue Dec 01 06:55:28 2015
我可以使用命令$summary = Get-Content $log | Select-Object -last 11 | Out-String
静态获取文件的最后11行,但只有数据实际移动时才会列出两条速度行,否则会导致文件列表的最后一行。最终不是一个大问题,但看起来不是很漂亮。
除了设定数量的行之外,如何在分隔符---------------
的最后一个(或第4个,总是4个)出现之后从文件中获取最后一行?
答案 0 :(得分:0)
我想出了一个解决方案,但我觉得必须有一个更好的方法。第一个命令找到所有分隔符,并将行号输出到$finds
数组,然后输出第二行,使用$finds
数组中的最后一个元素作为提取摘要的起点。
希望这有助于其他人!
$finds = Get-Content $log | Select-string "--------------" | Select-Object LineNumber
$summary = Get-Content $log | Select-Object -skip $finds[-1]."LineNumber" | Out-String
答案 1 :(得分:0)
Get-Content $log | Select-String 'Total' -Context 0,20
说明:Select-STring
查找包含' Total'的任何行。参数-Context 0,20
告诉它在匹配行之后最多显示20行(以及之前的零行)。
如果您复制' sales_total.txt'等文件,此行也会匹配。为了防止这种情况,您可以使匹配字符串更明确。例如,使用完整的行。
答案 2 :(得分:0)
试试这个:
Get-Content $log -Delimiter ('-'*78) |
Select -last 1