-
@yossiz אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
יש עדיין מה לשפר בסקריפט שכתבתי:
אני לא מבין בPS אבל הנה השני סנט שלי:
צריך לתת שם ייחודי לכל קובץ כדי שלא יהיה שגיאה כאשר יש שני קבצים עם שם תורם זהה
לשנות את שם הקובץ המקורי ל: שם המקורי+שם התורם.
צריך לטפל שבהרצה שנייה הסקריפט יתעלם מקבצים שכבר טופלו
לבדוק אם שם הקובץ גדול מ-10 תווים (ואז הוא טופל)
צריך לסנן תווים מיוחדים מתוך השם החדש הקובץ
$Path.Split([IO.Path]::GetInvalidFileNameChars()) -join '_'
ממיר את כל התווים הלא תקניים לקו תחתון (מקור)
ישר כח על העזרה @yossiz !
@odeddvir אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
לשנות את שם הקובץ המקורי ל: שם המקורי+שם התורם.
יותר יעיל יהיה להוסיף לשם הקובץ גם את התאריך המופיע על הקבלה
(אפשר רק את הערך של היום, מכיוון שהתיקיות ממילא מחולקות לפי חודשים) -
@odeddvir אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
לשנות את שם הקובץ המקורי ל: שם המקורי+שם התורם.
יותר יעיל יהיה להוסיף לשם הקובץ גם את התאריך המופיע על הקבלה
(אפשר רק את הערך של היום, מכיוון שהתיקיות ממילא מחולקות לפי חודשים)@מעלה-ומוריד יש בכלל כאלה כפולים? אני מתכווין האם יש מצב שיש שתי קבלות באותו יום - לאותו תורם?
-
@מעלה-ומוריד יש בכלל כאלה כפולים? אני מתכווין האם יש מצב שיש שתי קבלות באותו יום - לאותו תורם?
@chv אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
@מעלה-ומוריד יש בכלל כאלה כפולים? אני מתכווין האם יש מצב שיש שתי קבלות באותו יום - לאותו תורם?
איני יודע מה אצלו, אבל לי יצא שבוע שעבר לקראת סוף שנת המס שביצעתי תרומה והוצרכתי לחלק אותה לשני תשלומים בשני כרטיסי אשראי נפרדים בגלל המסגרת..
כמובן שקיבלתי שם אוטומטי 2 קבלות.
רק דוגמא שזה ייתכן -
אוקיי @חוקר .. הוא לא ענה לי אבל מספיק לי שיכול להיות כזה סיטואציה.
@מעלה-ומוריד תגיד אם הקוד הזה טוב ועובד:param([string]$path = '.') $pdftotext = "path to pdftotext" [Console]::OutputEncoding = [text.encoding]::utf8 Get-ChildItem -path $path -Filter '*.pdf' | ForEach-Object -Process { $donor = &$pdftotext -enc UTF-8 -simple $_.FullName - | Select-Object -Index 9 $donor = ($donor -split ' ' | Select-Object -Unique) -join ' ' $datee = &$pdftotext -enc UTF-8 -simple $_.FullName - | Select-Object -Index 4 $datee = ($datee -split ' ' )[0].Substring(2, 2) $text = '{0}{1}{2}' -f $donor.Substring(2), ' ', $datee $counter = 1 $file = '{0}{1}{2}{3}' -f $_.DirectoryName, '\', $text, '.pdf' while (Test-Path -Path $file) { $text = '{0}{1}{2}{3}({4})' -f $donor.Substring(2), ' ', $datee, ' ', $counter++ $file = '{0}{1}{2}{3}' -f $_.DirectoryName, '\', $text, '.pdf' } $_ | Rename-Item -NewName "$($text).pdf" }
צריך לשנות בשורה 3 לנתיב לקובץ pdftotext.
זה הקוד של @yossiz שערכתי קצת= עריכה =
שכחתי לציין מה זה עושה:
סורק את השם + התאריך. (את שם התורם אני מאחד - מוריד את הכפליות)
משנה את שם הקובץ ל: שם התורם + תאריך היום בחודש בלבד.
במקרה וכבר יש קובץ עם השם הזה - הוא משנה את השם ל:שם התורם וכו' + מספר (מתחיל מ-(1) והלאה לפי העניין). -
אוקיי @חוקר .. הוא לא ענה לי אבל מספיק לי שיכול להיות כזה סיטואציה.
@מעלה-ומוריד תגיד אם הקוד הזה טוב ועובד:param([string]$path = '.') $pdftotext = "path to pdftotext" [Console]::OutputEncoding = [text.encoding]::utf8 Get-ChildItem -path $path -Filter '*.pdf' | ForEach-Object -Process { $donor = &$pdftotext -enc UTF-8 -simple $_.FullName - | Select-Object -Index 9 $donor = ($donor -split ' ' | Select-Object -Unique) -join ' ' $datee = &$pdftotext -enc UTF-8 -simple $_.FullName - | Select-Object -Index 4 $datee = ($datee -split ' ' )[0].Substring(2, 2) $text = '{0}{1}{2}' -f $donor.Substring(2), ' ', $datee $counter = 1 $file = '{0}{1}{2}{3}' -f $_.DirectoryName, '\', $text, '.pdf' while (Test-Path -Path $file) { $text = '{0}{1}{2}{3}({4})' -f $donor.Substring(2), ' ', $datee, ' ', $counter++ $file = '{0}{1}{2}{3}' -f $_.DirectoryName, '\', $text, '.pdf' } $_ | Rename-Item -NewName "$($text).pdf" }
צריך לשנות בשורה 3 לנתיב לקובץ pdftotext.
זה הקוד של @yossiz שערכתי קצת= עריכה =
שכחתי לציין מה זה עושה:
סורק את השם + התאריך. (את שם התורם אני מאחד - מוריד את הכפליות)
משנה את שם הקובץ ל: שם התורם + תאריך היום בחודש בלבד.
במקרה וכבר יש קובץ עם השם הזה - הוא משנה את השם ל:שם התורם וכו' + מספר (מתחיל מ-(1) והלאה לפי העניין).@chv תודה ענקית!
משום מה הוא נתן את(1)
כמעט בכל הקבצים (מלבד שניים), זה קרה אחרי שהוא כבר שינה את השמות, כלומר בשלב ב'.
כמו כן, עדיין קיימת הבעיה של תווים לא חוקיים(")
ש @OdedDvir הביא למעלה פתרון לגביה.
חוץ מזה פיקס, ואני אסיר תודה, לך וליוסי. אשריכם ישראל.
הנה הפלט:Test-Path : Illegal characters in path. At C:\Users\This_user\Desktop\myscript.ps1:15 char:10 + while (Test-Path -Path $file) { + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (C:\Users\This_u...איר יערי 25.pdf:String) [Test-Path], ArgumentExcepti on + FullyQualifiedErrorId : ItemExistsArgumentError,Microsoft.PowerShell.Commands.TestPathCommand Rename-Item : Illegal characters in path. At C:\Users\This_user\Desktop\myscript.ps1:19 char:8 + $_ | Rename-Item -NewName "$($text).pdf" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Rename-Item], ArgumentException + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.RenameItemCommand
וזה, סתם פיקנטריה:
צריך : The term 'צריך' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At C:\Users\This_user\Desktop\myscript.ps1:21 char:1 + צריך לשנות בשורה 3 לנתיב לקובץ pdftotext. + ~~~~ + CategoryInfo : ObjectNotFound: (צריך:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
-
@מעלה-ומוריד יש בכלל כאלה כפולים? אני מתכווין האם יש מצב שיש שתי קבלות באותו יום - לאותו תורם?
@chv אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
@מעלה-ומוריד יש בכלל כאלה כפולים? אני מתכווין האם יש מצב שיש שתי קבלות באותו יום - לאותו תורם?
זה קבלות שמופקות אוטומטית, ולפעמים אנשים מכניסים באתר רק את השם הפרטי למשל.
-
@chv תודה ענקית!
משום מה הוא נתן את(1)
כמעט בכל הקבצים (מלבד שניים), זה קרה אחרי שהוא כבר שינה את השמות, כלומר בשלב ב'.
כמו כן, עדיין קיימת הבעיה של תווים לא חוקיים(")
ש @OdedDvir הביא למעלה פתרון לגביה.
חוץ מזה פיקס, ואני אסיר תודה, לך וליוסי. אשריכם ישראל.
הנה הפלט:Test-Path : Illegal characters in path. At C:\Users\This_user\Desktop\myscript.ps1:15 char:10 + while (Test-Path -Path $file) { + ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (C:\Users\This_u...איר יערי 25.pdf:String) [Test-Path], ArgumentExcepti on + FullyQualifiedErrorId : ItemExistsArgumentError,Microsoft.PowerShell.Commands.TestPathCommand Rename-Item : Illegal characters in path. At C:\Users\This_user\Desktop\myscript.ps1:19 char:8 + $_ | Rename-Item -NewName "$($text).pdf" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Rename-Item], ArgumentException + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.RenameItemCommand
וזה, סתם פיקנטריה:
צריך : The term 'צריך' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At C:\Users\This_user\Desktop\myscript.ps1:21 char:1 + צריך לשנות בשורה 3 לנתיב לקובץ pdftotext. + ~~~~ + CategoryInfo : ObjectNotFound: (צריך:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException
@מעלה-ומוריד אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
עדיין קיימת הבעיה של תווים לא חוקיים (") ש @OdedDvir הביא למעלה פתרון לגביה.
אני לא הצלחתי להבין איך אמורים ליישם את מה שהוא הביא שם.
אדרבא מי שמבין שיכתוב.@מעלה-ומוריד אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
משום מה הוא נתן את (1) כמעט בכל הקבצים (מלבד שניים), זה קרה אחרי שהוא כבר שינה את השמות, כלומר בשלב ב'.
ברור, זה מיועד להריץ פעם אחת בלבד. כי הוא פשוט סורק את הקבצים הקיימים בתקייה (מקווה שכתבתי ברור).
יש לך גיבוי לכל מה שאתה עושה, ברור?@מעלה-ומוריד אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
חוץ מזה פיקס, ואני אסיר תודה, לך וליוסי. אשריכם ישראל.
מאוד שמח שעזרתי
(בתכלס זה קוד שיוסי כתב, הכנסתי קצת מניפולציות על הטקסט)
-
@מעלה-ומוריד אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
עדיין קיימת הבעיה של תווים לא חוקיים (") ש @OdedDvir הביא למעלה פתרון לגביה.
אני לא הצלחתי להבין איך אמורים ליישם את מה שהוא הביא שם.
אדרבא מי שמבין שיכתוב.@מעלה-ומוריד אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
משום מה הוא נתן את (1) כמעט בכל הקבצים (מלבד שניים), זה קרה אחרי שהוא כבר שינה את השמות, כלומר בשלב ב'.
ברור, זה מיועד להריץ פעם אחת בלבד. כי הוא פשוט סורק את הקבצים הקיימים בתקייה (מקווה שכתבתי ברור).
יש לך גיבוי לכל מה שאתה עושה, ברור?@מעלה-ומוריד אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
חוץ מזה פיקס, ואני אסיר תודה, לך וליוסי. אשריכם ישראל.
מאוד שמח שעזרתי
(בתכלס זה קוד שיוסי כתב, הכנסתי קצת מניפולציות על הטקסט)
@chv אמר בעזרה - שינוי שם בקבצי PDF מרובים לפי טקסט מתוך המסמך:
ברור, זה מיועד להריץ פעם אחת בלבד. כי הוא פשוט סורק את הקבצים הקיימים בתקייה (מקווה שכתבתי ברור).
לא ממש הבנתי למה הוא נותן מספור גם לקבצים שאינם כפולים. (וכמו שכתבתי, זה קורה בשלב ב', קודם הוא משנה את השם לכולם, ואח"כ מוסיף מספרים.
יש לך גיבוי לכל מה שאתה עושה, ברור?
בוודאי
-
@chv אמר בעזרה - שינוי שם בקבצי 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 על הדרך.
-
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 על הדרך.
@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 קבלות. זה פשוט ישועה.ולמדתי הרבה על מידות טובות ונתינה על הדרך.
-
D dovid העביר נושא זה מ-תכנות ב-