जवाबों:
सबसे आसान तरीका है कि मैं एक छोटी सी PowerShell स्क्रिप्ट के साथ सोच सकता हूं । यदि आप विंडोज 7 चला रहे हैं, तो आपको इसे पहले ही इंस्टॉल कर लेना चाहिए, अगर इसे डाउनलोड करने और इंस्टॉल करने के लिए Microsoft.com पर न जाएं। लिंक एक विस्तृत विवरण प्रदान करता है लेकिन ऑपरेशन का जिस्ट आपको सुविधा के लिए यहां शामिल किया गया है।
PowerShell खोलें और इसे दर्ज करें:
(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | select FullName
चेंज C: \ Scripts जो भी आप खोज करना चाहते हैं, आप उसे केवल C: \ पर सेट कर सकते हैं, यदि आप चाहते हैं कि वह पूरी ड्राइव की जांच करे।
यह आपको इस तरह आउटपुट देगा (ध्यान दें कि ये C: \ Scripts के नीचे की खाली निर्देशिका हैं।
पूरा नाम ------- C: \ स्क्रिप्ट \ खाली C: \ Scripts \ Empty फ़ोल्डर 2 C: \ Scripts \ Empty \ Empty सबफ़ोल्डर C: \ Scripts \ New फ़ोल्डर \ खाली सबफ़ोल्डर तीन स्तरों गहरी
यदि आप PowerShell में थोड़ा सा देखते हैं, तो मुझे यकीन है कि आप यह जानना चाहते हैं कि यदि आप चाहते हैं तो स्वचालित रूप से खाली फ़ोल्डरों को कैसे हटा सकते हैं (हालांकि मैं इसके खिलाफ सलाह देता हूं, बस।)
संपादित करें : जैसा कि रिचर्ड ने टिप्पणियों में उल्लेख किया है, वास्तव में खाली निर्देशिका उपयोग के लिए:
(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ?{$_.GetFileSystemInfos().Count -eq 0} | select FullName
?{$_.GetFileSystemInfos().Count -eq 0}।
निम्नलिखित सबसे आसान तरीका है जिसे मैं कोड की एक पंक्ति के साथ इसे प्राप्त कर सकता हूं। यह वर्तमान स्थान पर खाली निर्देशिकाओं को सूचीबद्ध करता है। यदि पुनरावृत्ति की आवश्यकता है, तो पैरामीटर -Recurseको कॉल में जोड़ा जा सकता है Get-ChildItem।
Get-ChildItem -Directory | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
उपनाम के साथ लघु संस्करण:
dir -Directory | ? {$_.GetFileSystemInfos().Count -eq 0 }
या, एक पैरामीटर के रूप में PowerShell फ़ंक्शन (मैंने इसे अपने PowerShell स्टार्टअप प्रोफ़ाइल में जोड़ा):
Function Get-EmptyDirectories($basedir) {
Get-ChildItem -Directory $basedir | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
}
फिर इसे पाइपिंग सहित किसी भी अन्य पॉवरशेल फ़ंक्शन के रूप में लागू किया जा सकता है। उदाहरण के लिए, यह कॉल सिस्टम अस्थायी निर्देशिका में सभी खाली निर्देशिकाओं को हटा देगा:
Get-EmptyDirectories $env:TMP | del
इसे इस्तेमाल करे
Get-ChildItem C:\Scripts -Recurse -Directory | Where-Object {!$_.GetFileSystemInfos().Count}
गिनती 0 नहीं है, यह सभी अर्थों में मौजूद नहीं है कि निर्देशिका पूरी तरह से खाली है या अन्य पूरी तरह से खाली फ़ोल्डर रखती है
धन्यवाद, मैंने इसे अपनी स्क्रिप्ट के लिए एक आधार के रूप में इस्तेमाल किया। मैं खाली फ़ोल्डरों को हटाना चाहता था, लेकिन ऐसा करने की कोशिश कर रहा Where-Object {$_.GetFiles().Count -eq 0}था जो उन उप-निर्देशिकाओं को हटा देगा जो खाली नहीं थीं। मैंने एक फ़ोल्डर को हटाने के लिए DO WHILE लूप का उपयोग किया, जिसमें कोई फ़ाइल या फ़ोल्डर नहीं था, फिर वापस लूप करें और फिर से जाँच करें जब तक कि यह पेड़ के अंत तक न पहुँच जाए।
$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)
#>