পাওয়ারশেল একাধিক ফাইলের নামকরণ করে, ফাইলের নামের নির্দিষ্ট অংশ


5

আমি একাধিক ফাইলের পুনরায় নামকরণের চেষ্টা করছি যা ফাইলের নাম একইভাবে শেষ হয়। এই ফাইলগুলি বর্তমানে: "ফু বার (ইউ) (ভি 7.9) (ইউএসএ) .txt" "কয়েক বার ডু বের (ইউ) (ভি 7.9) (ইউএসএ) .txt" ect

আমি নামের "(ইউ) (ভি 7.9) (ইউএসএ)" সরিয়ে এবং এই বিভাগটি (ইউএসএ) দিয়ে প্রতিস্থাপন করার চেষ্টা করছি। এই ফাইলগুলির নাম দেওয়া হবে: "ফু বার (ইউএসএ) .txt" "ফিউ বার বার ডু বের (ইউএসএ) .txt"

আমি এটি বেশ কার্যকরভাবে পেতে পারি না, তবে এখানে আমি যা করার চেষ্টা করেছিলাম তা এখানে:

get-childItem '* (U) (V7.9) (USA).txt' | rename-item -newname { $_.name -replace '(U) (V7.9) (USA)','(USA)' }

উত্তর:


7

আপনি যে চরিত্রটি প্রতিস্থাপনের চেষ্টা করছেন তার মধ্যে বেশ কয়েকটি হ'ল রেগেজের বিশেষ অক্ষর। তাদের বিশেষ, সংরক্ষিত অর্থ রয়েছে যা আপনাকে "পালাতে" না পারলে জটিল ভাব তৈরি করতে দেয়। এগুলি থেকে বাঁচতে আপনাকে কেবল বিশেষ চরিত্রের ব্যাকস্ল্যাশ আক্রমণ অন্তর্ভুক্ত করতে হবে। উদাহরণ:

PS C:\> $string = "(U) (V7.9) (USA)"

#Failure
PS C:\> $string -replace "(U) (V7.9) (USA)", "(USA)"
(U) (V7.9) (USA)

#Success
PS C:\> $string -replace "\(U\) \(V7\.9\) \(USA\)", "(USA)"
(USA)

আপনি যদি একইরকম সমস্যায় পড়ে থাকেন তবে এখানে পাওয়ারশেল রেজেক্স রেফারেন্স রয়েছে। আপনি লক্ষ্য করতে পারেন যে ব্যাকস্ল্যাশ এর পরিবর্তে ব্যাকটিক `চরিত্রটি ব্যবহৃত হয়েছে - ব্যাকটিকটি পাওয়ারশেলের মধ্যে পলায়ন চরিত্র, তবে .NET (যা পাওয়ারশেল নির্মিত হয়েছে) -এ সমস্ত রেনেক্স হ্যান্ডলিংয়ের ক্ষেত্রে এটি সত্য নয়। তার কারণে, আপনি ইন্টারনেটে পাওয়ারশেলের জন্য রেগেক্স উদাহরণগুলিতে উভয়ই দেখতে পাবেন।


1
আপনার সাহায্যের জন্য ধন্যবাদ এবং বিলম্বিত পোস্টের জন্য দুঃখিত। কিছু কারণে "$ স্ট্রিং-রিপ্লেস" নিয়ে আমার কিছুটা সমস্যা হয়েছিল, তবে আমি এখানে যা ব্যবহার করেছি তা আমার জন্য পুরোপুরি কার্যকর হয়: get-childItem '*(U) (V7.9) (USA)*' | rename-item -newname { $_.name -replace '\(U\) \(V7.9\) \(USA\)','(USA)' }
রুট

2

আপনি যদি কেবল "(ইউ) (V7.9)" অংশটি সরাতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

-replace("\(U\) \(V7.9\) ","")

তবে আপনাকে প্যারান্থেসির জন্যও এস্কেপেকারেক্টর ব্যবহার করতে হবে। এবং নিম্নলিখিত স্পেসক্র্যাক্টরটি ভুলে যাবেন না, কারণ আমরা ডাবলস্পেস পেতে চাই না।

এছাড়াও substring(start,length)পদ্ধতিটি ব্যবহার করার একটি বিকল্প রয়েছে । তবে সেখানে আপনাকে "(ইউ) (ভি 7.9)" অংশের শুরু গণনা করতে হবে।

$string = "Randomname (U) (V7.9) (USA).txt"
$string.substring(0, $string.length - 20) + $string.substring($string.length - 9)

যা ফলাফল Randomname (USA).txt

20অক্ষর সংখ্যা স্ট্রিং এর প্রথম অক্ষর (পিছনে শুরু) কে সরানো (: এই ক্ষেত্রে হয় (এর (U))। 9স্ট্রিং প্রথম অক্ষরে অক্ষর (পিছনে শুরু) সংখ্যা অপসারণ করা হয় (এই ক্ষেত্রে: (এর (USA)কারণ আমরা একটি ডবল-স্পেস পেতে চান আত)।

এই পদ্ধতিটি Randomnameদৈর্ঘ্যের দৈর্ঘ্যের তুলনায় স্বতন্ত্র তবে এটি কেবল পরিচিত অবস্থান এবং সরানোর জন্য স্ট্রিংয়ের দৈর্ঘ্যের সাথে কাজ করে। যাইহোক -replace- মেঠোডটি ব্যবহার করা সহজ, যদি আপনি এস্কেপচারার্টার জানেন। আমি কেবল পছন্দসই আউটপুট পাওয়ার জন্য অন্য কোনও উপায় উল্লেখ করতে চেয়েছিলাম।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.