উপরের প্রশ্নের সমাধান হিসাবে এই উত্তরটি স্বয়ংসম্পূর্ণ। তবে এটি পূর্ববর্তী প্রশ্নটির ধারাবাহিকতা হিসাবে কাজ করে যা বন্ধ ছিল , সুতরাং কিছু বিস্তৃত অনুরোধগুলি অন্তর্ভুক্ত করেছিল যেমন ফাইলের নাম সম্পাদনা করার বিকল্পের সাথে একটি কনফার্মেশন ডায়ালগ এবং বৈধতাটিকে অগ্রাহ্য করার বিকল্পটি ব্যবহার করে ব্যবহারকারীর পছন্দের ফাইল নাম।
on adding folder items to the |folder| after receiving filelist
local folder, filelist
tell application "Finder" to repeat with f in the filelist
try
set item f's name to my validate(item f's name)
on error E
display notification E with title my name
end try
end repeat
end adding folder items to
--------------------------------------------------------------------------------
to validate(filename)
local filename
script validation
property old : filename
on newFilename for old
local old, new
set tids to {¬
{"_", space, "-"}, ¬
{"_&_", "&"}, ¬
{"and", "&"}, ""}
set new to old
repeat with tid in tids
set new to text items of new as text
set my text item delimiters to contents of tid
end repeat
new
end newFilename
on nameShowingErrors()
set tids to {¬
{" ͎", space}, ¬
{"-͎", "-", "—"}, ¬
{"&͎", "&"}, ""}
set info to old as text
repeat with tid in tids
set info to text items of info as text
set my text item delimiters to contents of tid
end repeat
info
end nameShowingErrors
to confirmRename()
local new
set [q, lf] to [quote, linefeed]
tell (display dialog ["The following characters were", ¬
" found in the filename: ⟨space⟩, \"-\" ", ¬
" ⟨hyphen⟩ \"&\" ⟨ampersand⟩", lf, lf, ¬
" Filename: ", q, nameShowingErrors(), q, ¬
lf, lf, "By default, these characters will", ¬
" be replaced with underscores.", ¬
" Alternatively, you can make your own edits", ¬
" below and revalidate the filename again."] ¬
as text ¬
with title ("Validate Filename") ¬
default answer (newFilename for old) ¬
buttons ["Rename", "Keep This Name"] ¬
default button 1 ¬
with icon (path to resource ("Finder.icns") ¬
in bundle application "Finder")) to if ¬
"Rename" = its button returned ¬
then return its text returned
false
end confirmRename
end script
tell validation
if filename = (newFilename for filename) then return filename
set newName to confirmRename()
if newName = false then return its old
if newName ≠ (newFilename for newName) ¬
then return validate(newName)
newName
end tell
end validate
এই স্ক্রিপ্টটি চলাকালীন, আমি আপনাকে আপনার মূল প্রশ্নের বিপরীতে যে মন্তব্যটি দিয়েছিলাম তার কথা মনে করিয়ে দেওয়া উচিত, যা উপরে অন্য একজন ব্যবহারকারী দ্বারা পুনরুক্ত করা হয়েছে: এই স্ক্রিপ্টটিতে একটি ফাইলে দু'বার ডাকার সম্ভাবনা রয়েছে কারণ ফোল্ডারের ভিতরে থাকা ফাইলগুলির নাম বদলে দেওয়া হয় দেখা হচ্ছে আবার ফোল্ডার ক্রিয়া ট্রিগার। এটি তখন ঘটে যখন ব্যবহারকারী প্রস্তাবিত ফাইল নাম সম্পাদনা করতে এবং একটি অবৈধ নাম সরবরাহ করে। স্ক্রিপ্টটি নতুন ফাইল নামটি দ্বিতীয়বার ডায়ালগটি দেখিয়ে বৈধ হওয়ার জন্য জিজ্ঞাসা করবে (এখন অবধি, এটি সমস্ত সাধারণ এবং পুরোপুরি কী হওয়া উচিত)। তবে, যখন ব্যবহারকারী নামকরণের মানদণ্ডকে উপেক্ষা করে এবং এই নামটি যেভাবেই ব্যবহার করতে বাছাই করে, ফাইলটির পুনরায় নামকরণ করা হয় এবং স্ক্রিপ্টটি আবার ট্রিগার করা হয়। এটি তৃতীয়টির জন্য ডায়ালগটি নিয়ে আসে সময়, যা আমরা আদর্শভাবে ঘটতে চাই তা নয়, তবে অনিবার্য।
(ফাইলগুলি যখন কোনও বৈধ ফাইলের নামকরণ করা হয় তখন এটি কোনও সমস্যা নয়, যদিও স্ক্রিপ্ট হিসাবে - দু'বার নির্বিশেষে মৃত্যুদন্ড কার্যকর করা হলেও ফাইলনামগুলির জন্য কিছু করা হয় না যা পরিবর্তনের প্রয়োজন হয় না))
উপরের কারণগুলির জন্য, আমি আপনাকে পরামর্শ দিচ্ছি যে আপনার ফোল্ডারটির ক্রিয়াটি কিছুটা ভিন্নভাবে প্রয়োগ করা উচিত এবং ফাইলগুলির নাম পরিবর্তন করার আগে ফাইলগুলি একটি নতুন আউটপুট ফোল্ডারে স্থানান্তরিত করে। এর আগে set item f's name to...
এমন কিছু দেখানোর আগে একটি লাইন যুক্ত করে এটি করা খুব সহজ :
move item f to the outputFolder
যেখানে আপনি স্ক্রিপ্টের শুরুতে outputFolder
একটি property
বা একটি ভেরিয়েবল হিসাবে সংজ্ঞায়িত করবেন যেখানে আউটপুট ফোল্ডারটি উপস্থিত রয়েছে তার অবস্থানের দিকে নির্দেশ করে (পছন্দ হিসাবে একটি alias
), যেমন:
set outputFolder to POSIX file "/Users/%you%/My Watched Folder/Processed Files" as alias
তবে, আপাতত, আপনি যা চান তা করতে আমি স্ক্রিপ্ট লিখেছি। আমি ধরে নিচ্ছি যে এমন অনেকগুলি উদাহরণ থাকবে না যেখানে আপনি নিজের নামকরণের মানদণ্ডকে উপেক্ষা করতে চান, তাই "থ্রি-ডায়ালগ" ঘটনাটি কখনই উদ্ভূত না হতে পারে, বা যখন তা ঘটে তখন উদ্বেগের চেয়ে কিছুটা বেশি হতে পারে।
ফোল্ডার ক্রিয়া হিসাবে কোনও স্ক্রিপ্ট ইনস্টল করতে , আমি আপনাকে আমার পূর্ববর্তী উত্তরের প্রথম অংশে পরিচালিত করব, যা আমি নীচে স্থানান্তর করেছি।
ফোল্ডার ক্রিয়া
ফোল্ডার ক্রিয়া দুটি উপায়ে যেকোন একটিতে তৈরি করা যেতে পারে: অটোমেটরের মাধ্যমে বা কোনও ফোল্ডার অ্যাকশন স্ক্রিপ্টের মাধ্যমে ।
ফোল্ডার অ্যাকশন স্ক্রিপ্ট কীভাবে তৈরি করা যায় সে সম্পর্কিত তথ্যের জন্য , যা আমি বলব সম্ভবত এই ক্ষেত্রে সবচেয়ে উপযুক্ত সমাধান হতে পারে, আপনি ম্যাক অটোমেশন স্ক্রিপ্টিং গাইড - ফোল্ডারগুলি পর্যবেক্ষণ করতে পারেন, এটি কীভাবে করবেন তা বিশদ করে।
কোনও ফোল্ডারের সাথে কোনও ফোল্ডার অ্যাকশন স্ক্রিপ্ট সংযুক্ত করে শিরোনামে বিভাগটি সর্বাধিক প্রাসঙ্গিক।