পাওয়ারশেল স্ক্রিপ্ট ব্যবহার করে উইন্ডোজে কীভাবে ফাঁকা ডিরেক্টরিগুলি খুঁজে পেতে হয়


8

উইন্ডোতে খালি ডিরেক্টরিগুলি খুঁজতে আপনি কোন আদেশ ব্যবহার করেন?

কিছু ফোল্ডারে কিছু লুকানো ফোল্ডার .svnবা এর মতো থাকতে পারে .settingsতবে সেগুলি এখনও খালি ফোল্ডার হিসাবে বিবেচনা করা উচিত।


আপনি উইন্ডোজের কোন সংস্করণটি চালাচ্ছেন?
উইন্ডোজ

উত্তর:


13

আমি সবচেয়ে সহজ উপায়টি মনে করতে পারি এটি একটি ছোট পাওয়ারশেল স্ক্রিপ্ট সহ । আপনি যদি উইন্ডোজ 7 চালাচ্ছেন তবে আপনার এটি ইতিমধ্যে ইনস্টল করা উচিত, যদি ডাউনলোড না করে ইনস্টল করার জন্য মাইক্রোসফট.কম এ যান না। লিঙ্কটি একটি বিশদ বিবরণ সরবরাহ করে তবে অপারেশনটির জাস্টটি আপনার সুবিধার জন্য এখানে অন্তর্ভুক্ত করা হয়েছে।

পাওয়ারশেলটি খুলুন এবং এটি প্রবেশ করুন:

(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | select FullName

সি পরিবর্তন করুন: through আপনি যেটি সন্ধান করতে চান তাতে স্ক্রিপ্টগুলি, আপনি এমনকি এটি কেবল সিটিতে সেট করতে পারেন \ আপনি যদি এটি পুরো ড্রাইভটি পরীক্ষা করতে চান তবে।

এটি আপনাকে এরূপ আউটপুট দেবে (নোটগুলি সি: the স্ক্রিপ্টগুলির নীচে খালি ডিরেক্টরিগুলি মনে রাখবেন)।

পুরো নাম
------- 
সি: \ স্ক্রিপ্ট \ খালি 
সি: \ স্ক্রিপ্টস ty খালি ফোল্ডার 2 
সি: \ স্ক্রিপ্টস \ খালি \ খালি সাবফোল্ডার 
সি: \ স্ক্রিপ্টস \ নতুন ফোল্ডার ty খালি সাবফোল্ডার তিন স্তরের গভীর

আপনি যদি পাওয়ারশেলের দিকে কিছুটা সন্ধান করেন তবে আমি নিশ্চিত যে আপনি কীভাবে খালি ফোল্ডারগুলি স্বয়ংক্রিয়ভাবে মুছতে পারবেন তা নির্ধারণ করতে সক্ষম হবেন (যদিও আমি কেবল এর ক্ষেত্রে এর বিরুদ্ধে প্রস্তাব দিই just)

সম্পাদনা করুন : রিচার্ড মন্তব্যে যেমন উল্লেখ করেছেন, সত্যিকারের খালি ডিরেক্টরি ব্যবহারের জন্য:

(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ?{$_.GetFileSystemInfos().Count -eq 0} | select FullName

উইন্ডোজ ভিস্তা ব্যবহার করছি
জোশুয়া

ভিস্তার জন্য পাওয়ারশেলটি এখানে ডাউনলোড করা যেতে পারে: মাইক্রোসফ্ট
/en/details.aspx?id=23200

7
দ্রষ্টব্য: এই পাইপলাইনটিতে এমন ফোল্ডারগুলি পাওয়া যাবে যাতে কোনও ফাইল থাকে না তবে এতে অন্যান্য ফোল্ডার থাকে। সম্পূর্ণ খালি ফোল্ডারগুলিকে পাইপের তৃতীয় উপাদানটি পরিবর্তন করতে হবে ?{$_.GetFileSystemInfos().Count -eq 0}
রিচার্ড

1
@ জোশুয়া, আপনি যেখানে অনুসন্ধান করতে চান সেখানে "সি: crip স্ক্রিপ্টস" পরিবর্তন করেন নি, তাই আপনি ত্রুটিটি পেয়েছেন "পথ 'সি: \ স্ক্রিপ্টস' খুঁজে পাচ্ছেন না কারণ এটি বিদ্যমান নেই।" লাইনের শুরুতে এটি ঠিক।
উইন্ডোজ

1
@ জোশুয়া, আপনি কি রিচার্ডসের মন্তব্য (এই থ্রেডের তৃতীয়টি) এবং উত্তরের আমার সম্পাদনাটি পড়েছেন? এটি কেবল আপনাকে কোনও ফাইল এবং কোনও শিশু ডিরেক্টরি (যেমন পাতার নোড) সহ ডিরেক্টরিগুলি দেবে
উইন্ডোস

2

কোডটি একটি একক লাইন দিয়ে এটি অর্জনের সবচেয়ে সহজ উপায় নীচে way এটি বর্তমান অবস্থানে খালি ডিরেক্টরিগুলি তালিকাভুক্ত করে। পুনরাবৃত্তি প্রয়োজন হলে পরামিতিগুলিতে -Recurseকলটিতে যুক্ত করা যেতে পারে Get-ChildItem

Get-ChildItem -Directory | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }

এলিয়াস সহ সংক্ষিপ্ত সংস্করণ:

dir -Directory | ? {$_.GetFileSystemInfos().Count -eq 0 }

বা, প্যারামিটারাইজড পাওয়ারশেল ফাংশন হিসাবে (আমি এটি আমার পাওয়ারশেল স্টার্টআপ প্রোফাইলে যুক্ত করেছি):

Function Get-EmptyDirectories($basedir) { 
    Get-ChildItem -Directory $basedir | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
}

এরপরে এটি পাইপিং সহ অন্য কোনও পাওয়ারশেল ফাংশন হিসাবে আহ্বান করা যেতে পারে। উদাহরণস্বরূপ, এই কলটি সিস্টেম অস্থায়ী ডিরেক্টরিতে সমস্ত খালি ডিরেক্টরি মুছে ফেলবে:

Get-EmptyDirectories $env:TMP | del


2

এটা চেষ্টা কর

Get-ChildItem C:\Scripts -Recurse -Directory | Where-Object {!$_.GetFileSystemInfos().Count}

গণনা 0 নয়, এটি মোটেও বিদ্যমান নয় যে ডিরেক্টরিটি সম্পূর্ণ ফাঁকা বা অন্য সম্পূর্ণ খালি ফোল্ডার ধারণ করে


1

ধন্যবাদ, আমি এটি আমার স্ক্রিপ্টের ভিত্তি হিসাবে ব্যবহার করেছি। আমি খালি ফোল্ডারগুলি মুছতে চেয়েছিলাম কিন্তু চেষ্টা করার Where-Object {$_.GetFiles().Count -eq 0}ফলে খালি নয় এমন সাব-ডিরেক্টরি থাকা ফোল্ডারগুলি মুছতে পারে । কোনও ফোল্ডার বা ফোল্ডার নেই এমন ফোল্ডারটি সরিয়ে ফেলার জন্য আমি ডু হুইল লুপটি ব্যবহার করে শেষ করেছিলাম আবার ফিরে লুপ করব এবং গাছের শেষের দিকে পৌঁছা না হওয়া পর্যন্ত আবার চেক করব।

$Datefn=Get-Date -format M.d.yyyy_HH.mm.ss
#Set The File Name for the log file
$DelFileName = $Datefn
#Set The File Ext for the log file
$DelFileExt = " - Old Files" + ".log"
#Set The File Name With Ext for the log file
$DelFileName = $DelFileName + $DelFileExt
#Set Log Path
$LogPath = [Environment]::GetFolderPath("Desktop")
$Path = 'Q:\'
$NumDays = 365
Get-ChildItem -Path $Path -Exclude DCID.txt,*.exe -Recurse | Where-Object {$_.lastwritetime -lt`
(Get-Date).addDays(-$NumDays) -and $_.psiscontainer -eq $false} |
    ForEach-Object  {
        $properties = @{`
            Path = $_.Directory`
            Name = $_.Name
            DateModified = $_.LastWriteTime
            Size = $_.Length / 1GB  }
    New-Object PSObject -Property $properties | select Path,Name,DateModified, Size
    } |
    Out-File "$LogPath\$DelFileName"
<#
#Removes the files found
Get-ChildItem -Path $Path -Exclude DCID.txt,*.exe -Recurse | Where-Object {$_.lastwritetime -lt`
(Get-Date).addDays(-365) -and $_.psiscontainer -eq $false} | Remove-Item -Recurse -Force
#Removes empty folders
DO {
$a = (Get-ChildItem $Path -Recurse | Where-Object {$_.PSIsContainer -eq $true}) | Where-Object`
{$_.GetFileSystemInfos().Count -eq 0} | Select-Object Fullname
$a
(Get-ChildItem $Path -Recurse | Where-Object {$_.PSIsContainer -eq $true}) | Where-Object`
{$_.GetFileSystemInfos().Count -eq 0} | Remove-Item -Force
}
WHILE ($a -ne $null)
#>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.