2013-03-28 41 views
0

取下7zip的输出流中的空行,我提取.tgz的档案与PowerShell和7zip的。 7zip有一个强制详细模式并污染我的屏幕。我只想要显示错误消息在PowerShell中

代码:

Write-Host "Extracting "$strArgument 

    # extract tgz to tar 
    & "$7z" x "-y" $strArgument | FIND /V "ing " | FIND /V "Igor Pavlov" | FIND /V "Processing " | FIND /V "Everything is Ok" | FIND /V "Folders: " | FIND /V "Files: " | FIND /V "Size: " | FIND /V "Compressed: " | FIND /V "Processing archive: " 

    # path to .tar 
    $strArgument = $strArgument.Replace(".tgz", ".tar") 
    $strArgument = $strArgument.Replace("i\data\", "") 

    # extract tar to file 
    #Write-Host $strArgument 
    & "$7z" x "-y" $strArgument | FIND /V "ing " | FIND /V "Igor Pavlov" | FIND /V "Processing " | FIND /V "Everything is Ok" | FIND /V "Folders: " | FIND /V "Files: " | FIND /V "Size: " | FIND /V "Compressed: " | FIND /V "Processing archive: " 

这让我有很多的空行输出:

Extracting Q:\mles\etl-i_test\i\data\divider-bin.tgz 










Extracting Q:\mles\etl-i_test\i\data\divider-conf.tgz 
... 

不过,我只是想:

Extracting Q:\mles\etl-i_test\i\data\divider-bin.tgz 
Extracting Q:\mles\etl-i_test\i\data\divider-conf.tgz 
我已经与FIND除去标准的消息

如何从我的流中删除空行?是否有强大的FIND开关?

回答

1

find没有一个这样的开关,但你可以使用findstr用正则表达式代替:

... | findstr /r /v "^$" 
1
我知道

最简单的方法就是通过-match运行结果,并过滤掉任何不包含非空白:

Write-Host "Extracting "$strArgument 

    # extract tgz to tar 
    & "$7z" x "-y" $strArgument | FIND /V "ing " | FIND /V "Igor Pavlov" | FIND /V "Processing " | FIND /V "Everything is Ok" | FIND /V "Folders: " | FIND /V "Files: " | FIND /V "Size: " | FIND /V "Compressed: " | FIND /V "Processing archive: " 

    # path to .tar 
    $strArgument = $strArgument.Replace(".tgz", ".tar") 
    $strArgument = $strArgument.Replace("i\data\", "") 

    # extract tar to file 
    #Write-Host $strArgument 
    (& "$7z" x "-y" $strArgument | FIND /V "ing " | FIND /V "Igor Pavlov" | FIND /V "Processing " | ND /V "Everything is Ok" | FIND /V "Folders: " | FIND /V "Files: " | FIND /V "Size: " | FIND /V "Compressed: " | FIND /V "Processing archive: ") -match '\S' 
+0

是否有可能将所有FINDs都放在一个单一的正则表达式中进行匹配呢? – mles 2013-03-28 13:10:33

+0

是的,没有。你可以使用替代方法将它们全部放在一个正则表达式中,但是你想要使用的方式与该正则表达式不匹配。编写正则表达式以匹配想要保留的行可能会更容易。例如 - 匹配'提取'。我已经提供了这个更好的解决方案,但是只想保留错误让我觉得可能需要包含更多的错误。 – mjolinor 2013-03-28 13:17:45