Powershell在字符串最后一次出现后从文本文件中获取行

Powershell在字符串最后一次出现后从文本文件中获取行,powershell,robocopy,Powershell,Robocopy,我有一个正在使用的robocopy日志文件,需要使用powershell提取摘要行。我遇到的问题是,摘要的行数并不总是相同的 假设日志文件如下所示: ------------------------------------------------------------------------------- ROBOCOPY :: Robust File Copy for Windows -------------

我有一个正在使用的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行)出现之后的最后一行,而不是设置的行数

我想出了一个解决办法,但我觉得必须有更好的办法。第一个命令查找所有分隔符,并将行号输出到
$finds
数组,然后输出第二行,使用
$finds
数组中的最后一个元素作为提取摘要的起点

希望这对其他人有帮助

$finds = Get-Content $log | Select-string "--------------" | Select-Object LineNumber

$summary = Get-Content $log | Select-Object -skip $finds[-1]."LineNumber" | Out-String
说明:
选择字符串
查找包含“总计”的任何行。参数
-Context 0,20
告诉它在匹配行之后最多显示20行(之前显示零行)

如果复制像“sales_total.txt”这样的文件,此行也将匹配。为了避免这种情况,您可以使匹配字符串更显式。例如,使用完整的行。

尝试以下操作:

Get-Content $log -Delimiter ('-'*78) |
Select -last 1

我在这里看到的一个缺点是上下文参数将在EOF之后添加空行,使其成为20行。我已经尝试过类似的方法,但视情况而定。我对这个项目的格式有点挑剔。不,它不添加空行。
Get-Content $log -Delimiter ('-'*78) |
Select -last 1