【问题标题】:How to create output depending on words in a string如何根据字符串中的单词创建输出
【发布时间】:2013-08-04 17:14:34
【问题描述】:

说我有一个脚本。 $result = convertDoc(source, dest) 可能有

DAOpenDocument("c:\docs\test.xlsx") 失败:当前没有打开文件 (0x0010)

失败,或者成功:

EX_CALLBACK_ID_PAGECOUNT:文件有 1 页。
导出成功:已创建 1 个输出文件。

我需要创建一个逻辑,如果 $result 在字符串中有关键字“失败”然后 Write-Host 失败,否则 $result 有关键字“导出成功”然后 Write-Host “成功”

【问题讨论】:

    标签: string powershell logic


    【解决方案1】:

    试试这样的:

    $result | Select-String '(failed|export successful)' | % {
      if ($_.Matches.Groups[1].Value -eq 'failed') {
        Write-Host 'failed'
      } else {
        Write-Host 'successful'
      }
    }
    

    请注意,$_.Matches.Groups[1] 需要 PowerShell v3。在早期版本中,您必须先扩展组才能访问它们:

    $value = ($_.Matches | select -Expand Groups)[1].Value
    

    也就是说,您是否可以控制convertDoc()?如果是这样,最好让该函数在没有文档打开时抛出异常并在 try..catch 块中调用它:

    try {
      $result = convertDoc(source, dest)
    } catch {
      Write-host $_.Exception.Message
    }
    

    【讨论】:

    • 感谢代码块。我一定会尝试的。它不是 PS 3.0,所以我会尝试 -expand 组。另外,我对 ConvertDoc 的源代码没有任何控制权,否则我会使用 try/catch。我会告诉你进展如何。
    【解决方案2】:

    在 $result 上使用模式匹配。选项是-match、-contains、-like 运算符。 例如。 if ($result -match "failed") { write-host "failed" } else { write-host "mission sucess" }

    【讨论】:

      【解决方案3】:

      为什么不这样?

      $result = 'DAOpenDocument("c:\docs\test.xlsx") failed: no file is currently open  (0x0010)'
      
      if($result.contains("failed"))
      { Write-Host "Failure" }
      elseif($result.contains("successful"))
      {write-host "Success!"}
      else
      {Write-Host "All is good"}
      

      【讨论】:

        猜你喜欢
        • 2013-07-08
        • 2018-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多