Ich habe diesen Code, dessen Ziel darin besteht, alle PDF-Dateien in einem Ordner zu finden, die innerhalb von x Tagen (wie vom Benutzer eingegeben) geändert wurden.
[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
Es gibt zwei Verbesserungen, die ich gerne vornehmen würde.
Jede dieser PDF-Dateien ist eigentlich ein Formular, und am Ende des Formulars befindet sich eine Zahlenfolge, die angibt, wohin das Formular gesendet werden muss. Ich weiß, dass ich itextsharp.dll verwenden muss, um die PDF-Datei zu analysieren. Ich möchte in die Ausgabedatei nach „Dateiname“ eine Kopfzeile „Ziel“ einfügen und diese Zeichenfolge aus dem PDF-Formular einschließen.
Im ersten VB-Eingabefenster wird gefragt, wie viele Tage im Voraus das Skript suchen soll. Ich möchte eine zweite Eingabe hinzufügen, die nach Suchparametern für den Titel fragt. Wenn der Benutzer also beispielsweise „Quittung“ eingibt, findet das Skript jede Datei mit dem TitelQuittung.pdf (Platzhalter auf beiden Seiten, sodass „laptop-receipt-2015-11-17.pdf“ gefunden wird).
Jede Hilfe ist herzlich willkommen!
Antwort1
Ich sehe keinen großen Aufwand bei der Umsetzung Ihrer Pläne.
- Da Get-ChildItem keine Eigenschaft bereitstellt,
Destination
müssen Sie diese selbst mit einer berechneten Eigenschaft hinzufügen. - Speichern Sie die GCI-Ergebnisse in einer Variablen und iterieren Sie sie, um sie auszuführendeinCode, um das Ziel für jede Datei zu erhalten.
- Passen Sie die $headers-Hashtabelle Ihren Bedürfnissen an (Bezeichnung/Ausdruck kann abgekürzt werden)
Keine Zeit, den entscheidenden itextsharp.dll-Code für Sie zu entwickeln.
## 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