2017-10-20 117 views
0

我正在嘗試編寫一個Powershell腳本來創建一個索引文件,我可以使用它將大量文檔導入到我們的文檔管理系統中。使用Powershell創建索引文件以導入文檔管理系統

幾件事情:

  • 的文件全部都位於同一個文件夾中。

  • 的所有文件都相同的類型,.PDF

  • 所有創建索引是在相應的文檔的文件名所需的信息。

所需的索引文件的格式將是一個txt文件,這裏是每一個新的行中的.txt文件的格式爲:

  • IndexField1,IndexField2,IndexField3 @ DocumentPath

三個例子文件:

  • C:\測試\李四,約翰 - 字母小學 - 第一Grade.pdf
  • C:\測試\灣,邁克爾 - 變壓器高 - 第12屆Grade.pdf
  • C:\測試\沙馬蘭,M.夜 - 人格高 - 第10 Grade.pdf

結束索引文件需要像這樣使用上面的例子:

  • DOE,約翰,字母小學,一年級@ C:\測試\李四,約翰 - 字母小學 - 第一Grade.pdf
  • 灣,邁克爾,變壓器高,12年級@ C:\測試\灣,邁克爾 - 變壓器高 - 12年級.pdf
  • 沙馬蘭,M.夜,人格高,10年級@ C:\測試\沙馬蘭,M.夜 - 人格高 - 第10 Grade.pdf

我可以創建一個文本文件列出所有的文件夾內的文件。

Get-ChildItem C:\Test\ -name | Out-File C:\Test\results.txt 

不過,我不知道從哪裏開始解析RESULTS.TXT的每一行,並追加相應的信息以獲得所需的索引文件的格式。

任何建議或示例帶領?

回答

1

循環由您的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,[email protected]$Path" 
} 
$Output | Out-File C:\Test\results.txt 

您的輸出看起來像.csv,沒有標題,也沒有正確的引號。如果您的DMS確實需要格式正確的.csvs,那麼您可以創建對象數組,然後以csv格式導出它們。使用ConvertTo-CSV然後Select-Object -Skip 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