@yossiz אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
@מעלה-ומוריד
param([string]$path = '.')
$pdftotext = "C:\path\to\PdfToText.exe"
[Console]::OutputEncoding = [text.encoding]::utf8
Get-ChildItem -path $path -Filter '*.pdf' | ForEach-Object -Process {
if ($_.BaseName -cmatch '^[A-Z0-9]{10}$') { # Check filename matches format
$donor = &$pdftotext -enc UTF-8 -simple $_.FullName - | Select-Object -Index 9 # Get donor line
$donor = $donor -replace "[$([Regex]::Escape(-join [IO.Path]::GetInvalidFileNameChars()))]", '_' # Replace illegal characters
$donor = $donor -replace "[\u202b\u202c]", "" # Strip bidi chars
$donor = (($donor -split ' ' | Select-Object -Unique) -join ' ').Trim() # Remove double name
$date = &$pdftotext -enc UTF-8 -simple $_.FullName - | Select-Object -Index 4 # Get date line
$date = $date -replace '^[^0-9\/]*([0-9/]+)[^0-9/]*$', '$1' # Get date
$date = $date -replace "[\u202b\u202c]", "" # Strip bidi chars
$date = $date -replace '/', '_'
$filename = '{0}_({1}_{2}).pdf' -f $_.BaseName, $donor, $date
$_ | Rename-Item -NewName $filename
}
}
עדכן אותנו אם עדיין יש שגיאות.
הסקריפט פועל רק על קבצים שהשם שלהם מתאים לפורמט של "10 אותיות גדולות או מספרים".
מימשתי את הצעותיו המעולות של @OdedDvir
לשנות את שם הקובץ המקורי ל: שם המקורי+שם התורם.
לבדוק אם שם הקובץ גדול מ-10 תווים (ואז הוא טופל)
ממיר את כל התווים הלא תקניים לקו תחתון (מקור)
ולמדתי קצת powershell על הדרך.
נהדר! פצצה!
גם השארת השם המקורי חשובה מצד עצמה.
יישר כח גדול מאוד. לא ראיתי באופק דרך להתמודד עם 1424 קבלות. זה פשוט ישועה.
ולמדתי הרבה על מידות טובות ונתינה על הדרך.
@chv
@yossiz