我已经审查了其他可能的解决方案。没有一个解决我的问题。让我们再试一次,看看是否可以更好地解释。我在Word文档中有以下几行文字:
“考试日期:10/04/2018 14:00”-(此日期/时间将始终有所不同) “由以下人员决定:约翰·D·多伊,医学博士,2018年10月4日15:08-(此日期/时间将有所不同-这些行中也可能有两行或三行)。
我在目录中有多个Word文档。我需要查找并能够比较至少两个文本字符串。一串文字将始终以“考试日期:mm / dd / yyy hh:mm”开始。另一串文字将始终以“由医生讲解:C. Smith,MD于08/31/2018在16:30”可能存在有时会出现多条“按命令划分”行。
我需要脚本在每个文档中查找这两个字符串,并返回文件名和这两行。输出可以是CSV或最简单的形式。现在,我可以得到一个CSV,但是我没有标题,并且如果有多行“由...指定”,它将所有这些都放在一个单元格中。我想为每个发现分开。我什至对脚本提示输入“按日期排序”也很开放。
这是我到目前为止的代码:
$date = (Get-Date (Get-Date).AddDays(-0) -Format 'MM-dd-yyyy')
$today = Get-Date -Format 'MM-dd-yyyy_hh.mm.ss'
$yesterday = (Get-Date (Get-Date).AddDays(-1) -Format 'yyyy-MM-dd')
# Get the files
$Files = @(Get-ChildItem D:\reports\dr_reports -Filter *.doc -ErrorAction SilentlyContinue -Force)
# Go through each file and write it to csv
Get-Childitem -Path "D:\reports\dr_reports\archive\$yesterday\" | ForEach-Object {
$raslodate = Select-String -InputObject $_ -Pattern "Date of Exam:" |
ForEach-Object {$_.ToString().Split()} |
Where-Object {$_ -match "\d\d/\d\d/\d\d\d"}
$dictatedate = Select-String -InputObject $_ -Pattern "^*Dictated\s+by\s*:?\s*(.*?)\s*\Z" |
ForEach-Object {$_.ToString().Split()} |
Where-Object {$_ -match "\d\d/\d\d/\d\d\d`n"}
$name = $_.Name.Split('.')[0]
$date = $_.CreationTime.ToString('MM-dd-yyyy')
if ($raslodate -eq $null) {
Write-Verbose -Message "There was an error collecting an exam date for $($_.fullname)"
Add-Content -Path "D:\script\GB\CSVs\report-errors-$yesterday.csv"
} else {
Write-Verbose -Message "Data collected succesfully for $($_.fullname)"
Add-Content -Path "D:\script\GB\CSVs\reports-$yesterday.csv" -Value "$name,$($raslodate[0]),$($dobdate[1]),$($dictatedate)"
}
}