如何根据字符串中的单词创建输出

时间:2013-08-04 17:14:35

标签: string powershell logic

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

  

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

失败,或成功:

  

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

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

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

$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
}

答案 1 :(得分:0)

在$ result上使用模式匹配。选项是-match,-contains,类似的运算符。 例如。如果($ result -match“failed”){write-host“failed”} else {write-host“mission sucess”}

答案 2 :(得分:0)

为什么不呢?

$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"}