כללי

שינוי שמות קבצים בכמות

מחפשים לשנות כמות גדולה של שמות קבצים במהירות? המדריך הבא יביא בפניכם כמה פתרונות

גילוי נאות: הנהלת האתר לא תישא בשום נזק כלשהו שייגרם כתוצאה מעבודה לפי מדריך זה. השינויים והעבודה על אחריות המשתמש בלבד.

סמפטום

בבואנו להעביר קבצים משרת של 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]))
תודה לרפאל אמיתי התותח על הפתרון המעולה

Rami

יזם, איש סיסטם, מתכנת בחסד, ונושם אינטרנט.

מאמרים קשורים

Leave a Reply

Your email address will not be published.

אתה תאהב גם את זה
Close
Back to top button
Skip to content