使用PowerShell创建导入文档管理系统的索引文件
我正在尝试编写一个PowerShell脚本,以创建一个索引文件,用于将大量文档导入文档管理系统 有几件事:使用PowerShell创建导入文档管理系统的索引文件,powershell,Powershell,我正在尝试编写一个PowerShell脚本,以创建一个索引文件,用于将大量文档导入文档管理系统 有几件事: 所有文档都位于同一文件夹中 所有文档的类型都相同.pdf 创建索引所需的所有信息都在相应文档的文件名中 所需索引文件的格式为.txt,以下是.txt文件中每一新行的格式: 索引字段1,索引字段2,IndexField3@DocumentPath 三个示例文件: C:\Test\Doe,John-字母表小学-1年级.pdf C:\Test\Bay,Michael-Transform
- 所有文档都位于同一文件夹中
- 所有文档的类型都相同.pdf
- 创建索引所需的所有信息都在相应文档的文件名中
- 索引字段1,索引字段2,IndexField3@DocumentPath
- C:\Test\Doe,John-字母表小学-1年级.pdf
- C:\Test\Bay,Michael-Transformer High-12 Grade.pdf
- C:\Test\Shyamalan,M.Night-个性高-10年级.pdf
- 多伊,约翰,字母小学,第一Grade@C:\Test\Doe,John-字母表小学-1年级.pdf
- 迈克尔湾,变压器高中,12号Grade@C:\Test\Bay,Michael-Transformer High-12年级.pdf
- Shyamalan,M.Night,个性高中,第10名Grade@C:\Test\Shyamalan,M.Night-个性高-10年级.pdf
Get-ChildItem C:\Test\ -name | Out-File C:\Test\results.txt
但是,我不知道从哪里开始解析results.txt的每一行,并附加适当的信息以获得索引文件所需的格式
是否有任何建议或示例?对您的
Get ChildItem
返回的对象进行循环。然后,您可以使用正则表达式使用-split
或-replace
,筛选出您要查找的各个片段。然后将它们组合到输出所需的格式中
$Output = Get-ChildItem C:\Test\ | ForEach-Object {
$Last = ($_.BaseName -split ',')[0]
$First = $_.BaseName -replace '(^.*?,\s)(.*?)(\s-\s.*)','$2'
$School = $_.BaseName -replace '(^.*?\s-\s)(.*?)(\s-\s.*)','$2'
$Grade = ($_.BaseName -split ' - ')[-1]
$Path = $_.FullName
# Unsure if there is supposed to be a space before first name.
"$Last, $First,$School,$Grade@$Path"
}
$Output | Out-File C:\Test\results.txt
您的输出看起来像一个没有标题和正确引用的.csv。如果您的文档管理系统(DMS)确实需要正确格式化的.CSV,那么您可以创建对象数组,然后以CSV格式导出它们。使用converttocsv
然后选择对象-跳过1
将允许您跳过文件的标题
$Output = Get-ChildItem C:\Test\ | ForEach-Object {
[pscustomobject]@{
Last = ($_.BaseName -split ',')[0]
First = $_.BaseName -replace '(^.*?,\s)(.*?)(\s-\s.*)','$2'
School = $_.BaseName -replace '(^.*?\s-\s)(.*?)(\s-\s.*)','$2'
GradeAtPath = "$(($_.BaseName -split ' - ')[-1])@$($_.FullName)"
}
}
$Output | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File C:\Test\results.txt