Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PowerShell创建导入文档管理系统的索引文件_Powershell - Fatal编程技术网

使用PowerShell创建导入文档管理系统的索引文件

使用PowerShell创建导入文档管理系统的索引文件,powershell,Powershell,我正在尝试编写一个PowerShell脚本,以创建一个索引文件,用于将大量文档导入文档管理系统 有几件事: 所有文档都位于同一文件夹中 所有文档的类型都相同.pdf 创建索引所需的所有信息都在相应文档的文件名中 所需索引文件的格式为.txt,以下是.txt文件中每一新行的格式: 索引字段1,索引字段2,IndexField3@DocumentPath 三个示例文件: C:\Test\Doe,John-字母表小学-1年级.pdf C:\Test\Bay,Michael-Transform

我正在尝试编写一个PowerShell脚本,以创建一个索引文件,用于将大量文档导入文档管理系统

有几件事:

  • 所有文档都位于同一文件夹中

  • 所有文档的类型都相同.pdf

  • 创建索引所需的所有信息都在相应文档的文件名中

所需索引文件的格式为.txt,以下是.txt文件中每一新行的格式:

  • 索引字段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
我可以创建一个.txt文件,列出文件夹中的所有文档

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