כללי

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

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

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

סמפטום

בבואנו להעביר קבצים משרת של 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. Required fields are marked *

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