আমি যখন পারি তখন সমস্ত পাওয়ারশেল কমান্ড ব্যবহার করতে পছন্দ করি। কিছুটা পরীক্ষার পরে, আমি এটি করতে পারি সেরা।
$source = "C:\test"
$destination = "C:\test2"
$filter = [regex] "^[0-9]{6}\.(jpg|gif)"
$bin = Get-ChildItem -Path $source | Where-Object {$_.Name -match $filter}
foreach ($item in $bin) {Copy-Item -Path $item.FullName -Destination $destination}
প্রথম তিনটি লাইন কেবল এটি পড়া সহজ করার জন্য, আপনি চাইলে আসল কমান্ডের ভিতরে ভেরিয়েবলগুলি সংজ্ঞায়িত করতে পারেন। এই কোড নমুনার মূলটি হ'ল "কোথায়-অবজেক্ট" কমান্ড যা এমন ফিল্টার যা নিয়মিত প্রকাশের মিলটি গ্রহণ করে। এটি লক্ষ করা উচিত যে নিয়মিত এক্সপ্রেশন সমর্থনটি কিছুটা অদ্ভুত। আমি একটি PDF রেফারেন্স কার্ড পাওয়া এখানে বাম পাশে সমর্থিত অক্ষর রয়েছে।
[Edit]
"@ জোহানেস রাসেল" উল্লিখিত হিসাবে, আপনি শেষ দুটি লাইনকে এক লাইনেও কমিয়ে আনতে পারেন।
((Get-ChildItem -Path $source) -match $filter) | Copy-Item -Destination $destination
মূল পার্থক্য হ'ল জোহানসের উপায় অবজেক্ট ফিল্টারিং করে এবং আমার পথটি টেক্সট ফিল্টারিং করে। পাওয়ারশেলের সাথে কাজ করার সময়, অবজেক্টগুলি ব্যবহার করা প্রায় সর্বদা ভাল।
[EDIT2]
@ স্মোকনহ্যাপ উল্লিখিত হিসাবে, উপরের স্ক্রিপ্টগুলি ফোল্ডারটির কাঠামো সমতল করবে এবং আপনার সমস্ত ফাইলকে একটি ফোল্ডারে রাখবে। আমি নিশ্চিত নই যে ফোল্ডারের কাঠামো ধরে রাখে এমন কোনও সুইচ রয়েছে কিনা। আমি-রিকার্স সুইচটি চেষ্টা করেছি এবং এটি কোনও উপকার করে না। আমি এই কাজটি করার একমাত্র উপায় হ'ল স্ট্রিং ম্যানিপুলেশনে ফিরে যাওয়া এবং আমার ফিল্টারে ফোল্ডার যুক্ত করা।
$bin = Get-ChildItem -Path $source -Recurse | Where-Object {($_.Name -match $filter) -or ($_.PSIsContainer)}
foreach ($item in $bin) {
Copy-Item -Path $item.FullName -Destination $item.FullName.ToString().Replace($source,$destination).Replace($item.Name,"")
}
আমি নিশ্চিত যে এটি করার আরও একটি মার্জিত উপায় আছে তবে আমার পরীক্ষাগুলি থেকে এটি কার্যকর হয়। এটি সমস্ত কিছু সংগ্রহ করে এবং তারপরে নামের সাথে মিল দুটি এবং ফোল্ডার অবজেক্টের জন্য ফিল্টার করে। স্ট্রিং ম্যানিপুলেশনে অ্যাক্সেস পাওয়ার জন্য আমাকে টসস্ট্রিং () পদ্ধতিটি ব্যবহার করতে হয়েছিল।
[EDIT3]
এখন আপনি যদি আপনার সমস্ত কিছু সঠিক হয়ে থাকে তা নিশ্চিত করার জন্য যদি আপনি পথের প্রতিবেদন করতে চান। আপনি "লিখন-হোস্ট" কমান্ডটি ব্যবহার করতে পারেন। এখানে কোডটি যা আপনাকে যা চলছে সে সম্পর্কে আপনাকে কিছু ইঙ্গিত দেবে।
cls
$source = "C:\test"
$destination = "C:\test2"
$filter = [regex] "^[0-9]{6}\.(jpg|gif)"
$bin = Get-ChildItem -Path $source -Recurse | Where-Object {($_.Name -match $filter) -or ($_.PSIsContainer)}
foreach ($item in $bin) {
Write-Host "
----
Obj: $item
Path: "$item.fullname"
Destination: "$item.FullName.ToString().Replace($source,$destination).Replace($item.Name,"")
Copy-Item -Path $item.FullName -Destination $item.FullName.ToString().Replace($source,$destination).Replace($item.Name,"")
}
এটি প্রাসঙ্গিক স্ট্রিংগুলি ফিরিয়ে আনবে। যদি আপনি কোথাও কিছু না পান তবে আপনি জানতে পারবেন কোন আইটেমে সমস্যা হচ্ছে।
আশাকরি এটা সাহায্য করবে