私はPowershellを使用して大きなファイルを検索し、mm-dd-yyyy形式の文字列をすべて含むすべての文字列を見つけています。次に、文字列を抽出して、日付が有効な日付であるかどうかを判断する必要があります。スクリプトはほとんどの部分で機能しますが、返される結果が多すぎて、必要なすべての情報が提供されません。ファイルには012-34-5678のような文字列があり、このために失敗し、12-34-5678の値が無効な日付として返されます。また、無効な日付が見つかった行番号を返すこともできません。誰かが以下の私のスクリプトを見て、私が間違っている可能性があることを確認できますか?
コメントアウトされた2行は、文字列番号とその行で見つかった文字列全体を返しますが、行からmm-dd-yyyyの部分だけを取り出して、それが有効な日付であるかどうかを判断する方法がわかりません。
どんな助けでも大歓迎です。ありがとう。
#$matches = Select-String -Pattern $regex -AllMatches -Path "TestFile_2013_01_06.xml" |
#$matches | Select LineNumber,Line
$regex = "\d{2}-\d{2}-\d{4}"
$matches = Select-String -Pattern $regex -AllMatches -Path "TestFile_2013_01_06.xml" |
Foreach {$_.Matches | Foreach {$_.Groups[0] | Foreach {$_.Value}}}
foreach ($match in $matches) {
#$date = [datetime]::parseexact($match,"MM-dd-yyyy",$null)
if (([Boolean]($match -as [DateTime]) -eq $false ) -or ([datetime]::parseexact($match,"MM-dd-yyyy",$null).Year -lt "1800")) {
write-host "Failed $match"
}
}