2017-04-26 8 views
0

私はしばらくの間、次のコードに取り組んできました。ここで私は感謝しています。このコードはWord文書またはテキスト文書を開き、特定のパターンを取り出して番号を返します。さて、唯一の問題は、マッチ演算子の使用後に実際のファイル名をフルパスで返す方法を見つけることができないことです。私が残したのは、範囲に一致する実際の数字だけです。どんな助けでも大歓迎です。Powershellのマッチ後のパスプロパティの復元

あなたが $wd.FullNameを参照するように計算されたプロパティを使用することができ
$SearchStandard = @('[0-9]{3}-[0-9]{2}-[0-9]{4}') 
$NOMATCH = @('235-[0-9]{2}-[0-9]{4}') 
$NOMATCH2 = @('[0-9]{3}-[0-9]{3}-[0-9]{4}') 
$Word = New-Object -ComObject Word.Application 
$allword = Get-childitem -recurse *.docx , *.txt 
$newobj = New-Object -com word.application 
Foreach ($wd in $allword) { 
    $docu = $newobj.Documents.Open($wd.fullname, $false, $true) 
    $docu.Paragraphs | ForEach-Object { 
     ForEach ($SearchText in $SearchStandard) { 
      $_.Range.Text | Where-Object {($_ -match $SearchText) -and ($_-notmatch $NOMATCH) -and ($_-notmatch $NOMATCH2)} 
     } 
    } 
} 
+0

単に優しいヒント:あなたが受け取った大きな助けに感謝している場合は、あなたを解決した答えを受け入れることを検討します適切な回答の左側のチェックマークをクリックして、過去の問題を解決してください。 –

+0

まず、適切なインデントを行う必要があります。最初に$ SearchStandardにマッチするので、$ NOMATCH2は場所が異なるので意味をなさない。 – LotPings

+0

@LotPings '-match' v' -notmatch'です。 '153-54-8645'は3つの条件すべてを満たしますが、 '1503-54-8645'は '$ SearchText'にマッチしますが、_also_は' $ NOMATCH2'にマッチするので、 –

答えて

0

$_.Range.Text | Where-Object { 
    ($_ -match$SearchText) -and 
    ($_-notmatch $NOMATCH) -and 
    ($_-notmatch $NOMATCH2) 
} | Select-Object @{Label='Number';Expression={$_}},@{Label='Path';Expression={$wd.FullName}} 
関連する問題