2017-05-23 115 views
1

我有一個文本文件充滿了電視節目,在文本文檔的每行中它們的名稱末尾帶有一個ID。 我想忽略任何空白行或忽略我試圖壓制這樣的,但沒有解決問題的任何錯誤,任何錯誤忽略ForEach-Object循環中的錯誤

Get-Content -Path "C:\test\text.txt" | ForEach-Object { 
    $_.Substring($_.Length - 5) -ErrorAction 'SilentlyContinue' 
} 

。我如何跳過空行或抑制foreach循環中的錯誤消息?

+0

參數'-ErrorAction'可以用於cmdlet,但不能用於對象方法。 –

回答

3

您可以將代碼之前全局更改錯誤行爲變量,然後將其設置回它的前值算賬:

$PrevErrorActionPreference = $ErrorActionPreference 
$ErrorActionPreference = 'silentlycontinue' 

Get-Content -Path "C:\test\text.txt" | ForEach-Object { 
    $_.Substring($_.Length - 5) 
} 

$ErrorActionPreference = $PrevErrorActionPreference 

或者,只需使用一個If語句來測試該字符串的前的長度使用SubString

Get-Content -Path "*.txt" | ForEach-Object { 
    If ($_.Length -ge 5) { $_.Substring($_.Length - 5) } 
} 

第三個選擇是使用一個Try..Catch塊:

Get-Content -Path "*.txt" | ForEach-Object { 
    Try { 
     $_.Substring($_.Length - 5) 
    } Catch { 
     # Do nothing 
    } 
}