忽略 ForEach-Object 循环中的错误

dff*_*fsd 2 error-handling powershell

我有一个充满电视节目的文本文件,文本文档的每一行的名称末尾都有一个 ID。我想忽略任何空行或忽略任何错误

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

我试图抑制任何类似的错误,但这并没有解决问题。如何在 foreach 循环中跳过空行或抑制错误消息?

Mar*_*agg 5

您可以在代码之前全局更改错误操作变量,然后将其设置回之前的值:

$PrevErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = 'silentlycontinue'

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

$ErrorActionPreference = $PrevErrorActionPreference
Run Code Online (Sandbox Code Playgroud)

或者,只需If在使用之前使用语句来测试字符串的长度SubString

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

第三种选择是使用Try..Catch块:

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