আমি 15 দিনেরও বেশি আগে নির্দিষ্ট ফোল্ডারে তৈরি করা ফাইলগুলি মুছতে চাই। আমি কীভাবে পাওয়ারশেল ব্যবহার করে এটি করতে পারি?
আমি 15 দিনেরও বেশি আগে নির্দিষ্ট ফোল্ডারে তৈরি করা ফাইলগুলি মুছতে চাই। আমি কীভাবে পাওয়ারশেল ব্যবহার করে এটি করতে পারি?
উত্তর:
প্রদত্ত উত্তরগুলি কেবল ফাইলগুলি মুছে ফেলবে (যা স্বীকার করতে হবে যে এটি এই পোস্টের শিরোনামে রয়েছে) তবে এখানে এমন কিছু কোড রয়েছে যা প্রথমে 15 দিনের চেয়ে পুরানো সমস্ত ফাইল মুছে ফেলবে এবং তারপরে রেকর্ডস করে যে কোনও খালি ডিরেক্টরি মুছে ফেলা হবে তা মুছে ফেলবে পিছনে। আমার কোড এছাড়াও -Forceলুকানো এবং কেবল পঠনযোগ্য ফাইলগুলি মুছতে অপশনটিও ব্যবহার করে । এছাড়াও, আমি alias লেখা ব্যবহার করবেন হিসেবে ওপি PowerShell কাছে নতুন মনোনীত করেছিলেন এবং বুঝতে পারে না পারে কি gci, ?, %, ইত্যাদি আছে।
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse
এবং অবশ্যই যদি আপনি দেখতে চান যে ফাইল / ফোল্ডারগুলি মুছে ফেলার আগে মুছে ফেলা হবে তবে আপনি কেবল এতে -WhatIfস্যুইচটি যুক্ত করতে পারেনRemove-Item মুছার উভয় লাইনের শেষে সিমিডিলেট কলটিতে ।
এখানে প্রদর্শিত কোডটি পাওয়ারশেল v2.0 সামঞ্জস্যপূর্ণ তবে আমি এই কোডটি এবং আমার ব্লগে আরও সহজে ব্যবহারযোগ্য ফাংশন হিসাবে দ্রুত পাওয়ারশেল v3.0 কোডটি দেখাই ।
কেবল সহজভাবে (পাওয়ারশেল ভি 5)
Get-ChildItem "C:\temp" -Recurse -File | Where CreationTime -lt (Get-Date).AddDays(-15) | Remove-Item -Force
আর একটি উপায় হ'ল বর্তমান তারিখ থেকে 15 দিন বিয়োগ করা এবং CreationTimeসেই মানটির সাথে তুলনা করা :
$root = 'C:\root\folder'
$limit = (Get-Date).AddDays(-15)
Get-ChildItem $root -Recurse | ? {
-not $_.PSIsContainer -and $_.CreationTime -lt $limit
} | Remove-Item
মূলত, আপনি প্রদত্ত পাথের নীচে ফাইলগুলি পুনরাবৃত্তি করে, CreationTimeবর্তমান সময় থেকে পাওয়া প্রতিটি ফাইলের বিয়োগফল এবং Daysফলাফলের সম্পত্তির সাথে তুলনা করে । -WhatIfসুইচ আসলে ফাইল মুছে ফেলার (যা ফাইল মুছে দেওয়া হবে) ছাড়া ঘটবে আপনাকে বলতে হবে, সুইচ অপসারণ আসলে ফাইল মুছে ফেলতে:
$old = 15
$now = Get-Date
Get-ChildItem $path -Recurse |
Where-Object {-not $_.PSIsContainer -and $now.Subtract($_.CreationTime).Days -gt $old } |
Remove-Item -WhatIf
এটা চেষ্টা কর:
dir C:\PURGE -recurse |
where { ((get-date)-$_.creationTime).days -gt 15 } |
remove-item -force
-recurseখুব বেশি, না? দির তালিকাটি পুনরাবৃত্তভাবে হয়, আইটেমটি মুছে ফেলা বাচ্চাদের অন্তর্ভুক্ত করা উচিত নয়, তাই না?
এস্পেরেন্টো 57 এর স্ক্রিপ্ট পুরানো পাওয়ার শেলের সংস্করণগুলিতে কাজ করে না। এই উদাহরণটি করে:
Get-ChildItem -Path "C:\temp" -Recurse -force -ErrorAction SilentlyContinue | where {($_.LastwriteTime -lt (Get-Date).AddDays(-15) ) -and (! $_.PSIsContainer)} | select name| Remove-Item -Verbose -Force -Recurse -ErrorAction SilentlyContinue
যদি আপনি Windows 10 বাক্সে উপরের উদাহরণগুলোতে সঙ্গে সমস্যা হয়ে থাকে, তাহলে প্রতিস্থাপন চেষ্টা .CreationTimeসঙ্গে .LastwriteTime। এটি আমার পক্ষে কাজ করেছে।
dir C:\locationOfFiles -ErrorAction SilentlyContinue | Where { ((Get-Date)-$_.LastWriteTime).days -gt 15 } | Remove-Item -Force
LastwriteTimeযেমনটি হয় না CreationTime, LastwriteTimeপ্রতিবার ফাইলটি সংশোধন করা হয়।
#----- Define parameters -----#
#----- Get current date ----#
$Now = Get-Date
$Days = "15" #----- define amount of days ----#
$Targetfolder = "C:\Logs" #----- define folder where files are located ----#
$Extension = "*.log" #----- define extension ----#
$Lastwrite = $Now.AddDays(-$Days)
#----- Get files based on lastwrite filter and specified folder ---#
$Files = Get-Children $Targetfolder -include $Extension -Recurse | where {$_.LastwriteTime -le "$Lastwrite"}
foreach ($File in $Files)
{
if ($File -ne $Null)
{
write-host "Deleting File $File" backgroundcolor "DarkRed"
Remove-item $File.Fullname | out-null
}
else
write-host "No more files to delete" -forgroundcolor "Green"
}
}
$Filesখালি থাকলে এটি ভবিষ্যত বিবৃতিতে প্রবেশ করবে না । আপনার যদি বিবৃতিতে ভবিষ্যদ্বাণী করা উচিত ।