כללי
שינוי שמות קבצים בכמות
מחפשים לשנות כמות גדולה של שמות קבצים במהירות? המדריך הבא יביא בפניכם כמה פתרונות
גילוי נאות: הנהלת האתר לא תישא בשום נזק כלשהו שייגרם כתוצאה מעבודה לפי מדריך זה. השינויים והעבודה על אחריות המשתמש בלבד.
תוכן העניינים
סמפטום
בבואנו להעביר קבצים משרת של Center Stack אל כונן גיבוי, נתקלנו בכמות עצומה של שמות קבצים שנראים כך:
Tests.txt@m#243593341^87ffa7a0-b604-4f5f-773e-7a9d3f7b8fa1 Results.docx@m#123524541^37dda5a3-b604-4d5d-825e-3a1d6ffb3da2
היות ונדרשנו לשנות את שמות כל הקבצים שבתוך כלל התיקיות ותתי התיקיות, היה ברור שנצטרך כאן פתרון אחר.
פתרון בצד ה-Powershell
נוכל להשתמש בקוד PS הבא על מנת לשנות בקליק את שמות כלל הקבצים:
$Pathfiles = 'C:\Users\david\Desktop\Tests\' $all_files = Get-ChildItem $Pathfiles -Recurse foreach ($file in $all_files) { $old_name = $file.Name $regex_pattern = '(.+)@(.+)' $replace_pattern = '$1' $new_name = $old_name -replace $regex_pattern, $replace_pattern Rename-Item -Path $file.FullName -NewName $new_name }
בשורה הראשונה יש להכניס את כתובת התיקיה שלכם.
כמו כן, ניתן להוריד את הקובץ מכאן
הסבר מה הסקריפט עושה
מה שהסקריפט הזה עושה, הוא מחפש את הקבצים המופיעים עם טקסט לפני ואחרי ה-@, ומשנה כך שיצא שם קובץ תקין.
התוצאה:
Tests.txt Results.docx
פתרון בצד ה-Python
נוכל להשתמש בקוד פייתון הבא על מנת לשנות בקליק את שמות כלל הקבצים:
import re import os path = 'C:/Users/user/Documents/test/' # run on folder and subfolders and files for root, dirs, files in os.walk(path): for i in files: print(i) # os.rename(os.path.join(root, i), os.path.join(root, "new filename" + ".txt")) os.rename(os.path.join(root, i), os.path.join(root, re.split("@", i)[0]))
תודה לרפאל אמיתי התותח על הפתרון המעולה