View Full Version : تغییر نام گروهی فایل
madani426
یک شنبه 31 تیر 1403, 10:33 صبح
با سلام و عرض ادب
دوستان من میخواستم یه تعداد فایل عکس رو تغییر نام بدم به اینصورت که اول داخل یک پوشه کل فایل ها رو بررسی کنم ببینم نام فایل بین چه بازه عددی می باشد بعد قبلش یه عدد بزارم
مثل عکس
155901
حالا میخوام اگه اسم عکس بین 1 الی 2540 بود پسوند 0-0-94 قبل از اسم فایل اضافه کنم(با حفظ نام فعلی)
یا
اگه اسم عکس بین 2541 الی 12898 بود پسوند 0-0-95 قبل از اسم فایل اضافه کنم(با حفظ نام فعلی)
و تا آخر
این فایل ها مربوط به سال مختلف هستش که باید با توجه به نامش بررسی بشه بعد تغییر نام داده شود چون تعدادش زیاد هستش با چشم خطا به وجود میاد
اگه راهنمایی کنید ممنون میشم
mazoolagh
یک شنبه 31 تیر 1403, 19:13 عصر
سلام و روز خوش
شما بعد از ساخت لیست از فایلهای فولدر،
یک حلقه میسازین و هر اسم رو با "-" split میکنین
و اولین المنت میشه اون شماره ای که باید محدوده اش کنترل بشه.
مابقی کار یک rename هست.
در نوشتن کدوم بخش کد مشکل دارین تا راهنمایی کنم.
madani426
دوشنبه 01 مرداد 1403, 07:06 صبح
سلام و روز خوش
شما بعد از ساخت لیست از فایلهای فولدر،
یک حلقه میسازین و هر اسم رو با "-" split میکنین
و اولین المنت میشه اون شماره ای که باید محدوده اش کنترل بشه.
مابقی کار یک rename هست.
در نوشتن کدوم بخش کد مشکل دارین تا راهنمایی کنم.
ممنون از راهنمایی شما قسمت اولش رو مشکل دارم به دست آوردن کل فایل های یک پوشه و خواندن اسم آن ها
آیا دستوری حلقه ای هست که خودش از ابتدا تا انتها فایلها رو بررسی کنه ؟
mazoolagh
دوشنبه 01 مرداد 1403, 10:11 صبح
شما میتونین با directory.getfiles (https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.getfiles?view=netframework-4.8.1) یا directory.enumeratefiles (https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.enumeratefiles?view=netframewo rk-4.8.1) لیست فایلهای یک فولدر رو بگیرین.
اینها با هم تفاوت دارن:
getfiles یک آرایه string برمیگردونه (یکجا) برای همین اگر تعداد زیادی فایل باشه زمان میبره تا لیست پر بشه،
ولی enumeratefiles یک enumerable collection برمیگردونه برای همین بلافاصله از اولین فایل در دسترس هست و برای فولدرهایی که فایلهای زیاد دارن سریعتر هست.
برای rename کردن getfiles باید استفاده کنین، چون در enumeratefiles فایلهای rename شده هم دوباره در لیست میان
و برنامه یا دچار خطا میشه یا تو لوپ گیر میکنه.
حالا با فرض این که در پوشه مورد نظر فقط همین فایلهای تصویری هست که گفتین:
IMPORTS SYSTEM.IO
SUB batch_rename(folder_path AS STRING)
DIM files_list = directory.getfiles(folder_path)
FOR EACH filepath AS STRING IN files_list
DIM filename AS STRING = path.GetFileName(filepath)
DIM x AS STRING = filename.split("-"c)(0)
DIM new_filename AS STRING
SELECT CASE CINT(x)
CASE <= 2540
new_filename = "94-0-0-" + filename
CASE 2541 TO 12898
new_filename = "95-0-0" + filename
CASE 12899 TO ....
new_filename = "96-0-0" + filename
CASE ELSE
new_filename = "...." + filename
END SELECT
DIM new_filepath AS STRING = path.getdirectoryname(filepath) + "" + new_filename
file.move(filepath, new_filepath)
NEXT
END SUB
madani426
دوشنبه 01 مرداد 1403, 10:36 صبح
شما میتونین با directory.getfiles (https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.getfiles?view=netframework-4.8.1) یا directory.enumeratefiles (https://learn.microsoft.com/en-us/dotnet/api/system.io.directory.enumeratefiles?view=netframewo rk-4.8.1) لیست فایلهای یک فولدر رو بگیرین.
اینها با هم تفاوت دارن:
getfiles یک آرایه string برمیگردونه (یکجا) برای همین اگر تعداد زیادی فایل باشه زمان میبره تا لیست پر بشه،
ولی enumeratefiles یک enumerable collection برمیگردونه برای همین بلافاصله از اولین فایل در دسترس هست و برای فولدرهایی که فایلهای زیاد دارن سریعتر هست.
برای rename کردن getfiles باید استفاده کنین، چون در enumeratefiles فایلهای rename شده هم دوباره در لیست میان
و برنامه یا دچار خطا میشه یا تو لوپ گیر میکنه.
حالا با فرض این که در پوشه مورد نظر فقط همین فایلهای تصویری هست که گفتین:
IMPORTS SYSTEM.IO
SUB batch_rename(folder_path AS STRING)
DIM files_list = directory.getfiles(folder_path)
FOR EACH filepath AS STRING IN files_list
DIM filename AS STRING = path.GetFileName(filepath)
DIM x AS STRING = filename.split("-"c)(0)
DIM new_filename AS STRING
SELECT CASE CINT(x)
CASE <= 2540
new_filename = "94-0-0-" + filename
CASE 2541 TO 12898
new_filename = "95-0-0" + filename
CASE 12899 TO ....
new_filename = "96-0-0" + filename
CASE ELSE
new_filename = "...." + filename
END SELECT
DIM new_filepath AS STRING = path.getdirectoryname(filepath) + "" + new_filename
file.move(filepath, new_filepath)
NEXT
END SUB
خیلی خیلی ممنونم از توضیحات شما
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.