我有這段程式碼,目標是查找資料夾中在 x 天內修改過的所有 PDF 檔案(由使用者輸入)。
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
$title = 'PDF Last Modified'
$msg = 'Days prior:'
$text = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
$headers = @{Expression={$_.CreationTime};Label="File Created";width=25}, `
@{Expression={$_.LastWriteTime};Label="File Edited";width=25}, `
@{Expression={"{0}" -f $_.FullName.Split("\")[-2]};Label="Folder";width=30}, `
@{Expression={$_.Name};Label="File Name";width=50}
Get-ChildItem -Path ..\ -Recurse -Filter *.pdf | Where-Object {$_.lastwritetime -gt (Get-Date).AddDays(-$text)} | sort LastWriteTime -descending | format-table $headers | out-file PDFOutput-$(get-date -f yyyy-MM-dd).txt -width 300
我想做出兩項改進。
每個 PDF 文件實際上都是一個表單,該表單的底部是一串數字,用於標識該表單需要發送到的位置。我知道我需要使用itextsharp.dll來解析PDF檔;我想在輸出檔案中的“檔案名稱”後麵包含標題“目標”,並包含 PDF 表單中的該字串。
在最初的 VB-Input 視窗中,它會詢問腳本應在多少天之前進行搜尋。我想添加第二個輸入,要求輸入標題的任何搜尋參數,因此如果用戶輸入“收據”,腳本會找到任何標題為的文件收據.pdf(兩側都有通配符,因此會找到laptop-receipt-2015-11-17.pdf)。
非常感謝任何幫助!
答案1
我看不出你為實現你的計劃付出了多少努力。
- 由於 Get-ChildItem 不提供屬性,因此
Destination
您必須自己使用計算屬性來新增它。 - 將 gci 結果保存在變數中並迭代運行你的取得每個文件上的目標的代碼。
- 修改 $headers 哈希表以滿足您的需求(標籤/表達式可能會縮寫)
沒有時間為您開發關鍵的 itextsharp.dll 程式碼。
## Q:\Test\2019\03\23\SU_1416552.ps1
$Folder = (Get-Item ..).FullName
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
$title = 'PDF Last Modified'
$msg = 'Days prior:'
$DaysPrior = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
$title = 'PDF Name Part'
$msg = 'String:'
$Namepart = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title)
$PdfFiles = Get-ChildItem (Join-Path $Folder ("*{0}*" -f $NamePart)) -Recurse -File -Filter *.pdf|
Where-Object LastWriteTime -gt (Get-Date).AddDays(-$DaysPrior) |
Sort-Object LastWriteTime -descending |
Select-Object -Property FullName,Name,CreationTime,LastWriteTime,
@{L='Destination';E={$Null}}
foreach ($PdfFile in $PdfFiles){
##
## Insert **your** code to get FormField Destination
##
$PdfFile.Destination = "string of numbers"
}
$headers = @{L="File Created";width=25;E={$_.CreationTime}},
@{L="File Edited" ;width=25;E={$_.LastWriteTime}},
@{L="Folder" ;width=30;E={$_.FullName.Split("\")[-2]}},
@{L="File Name" ;width=50;E={$_.Name}},
@{L="Destination" ;width=30;E={$_.Destination}}
$PdfFiles | Format-Table $headers |
Out-File PDFOutput-$(get-date -f yyyy-MM-dd).txt -width 300