Powershell Script का उपयोग करके विंडोज में खाली निर्देशिका कैसे खोजें


8

विंडोज में खाली निर्देशिकाओं को खोजने के लिए आप किस कमांड का उपयोग करते हैं?

कुछ फ़ोल्डरों में कुछ छिपे हुए फ़ोल्डर जैसे .svnया हो सकते हैं .settings, लेकिन उन्हें अभी भी खाली फ़ोल्डर माना जाना चाहिए।


आप विंडोज़ का कौन सा संस्करण चला रहे हैं?
विंडोस

जवाबों:


13

सबसे आसान तरीका है कि मैं एक छोटी सी 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


Vista के लिए PowerShell यहां डाउनलोड किया जा सकता है: microsoft.com/download/en/details.aspx?id=23200
Windos

7
नोट: उस पाइपलाइन में वे फ़ोल्डर मिलेंगे जिनमें कोई फ़ाइल नहीं है लेकिन अन्य फ़ोल्डर हैं। पूरी तरह से खाली फ़ोल्डरों को पाइप के तीसरे तत्व को बदलने के लिए ?{$_.GetFileSystemInfos().Count -eq 0}
रिचर्ड

1
@ जोशुआ, आपने "C: \ Scripts" को नहीं बदला, जहाँ आप खोजना चाहते हैं, इसलिए आपको त्रुटि मिलती है "पथ 'C: \ Scripts' नहीं ढूँढ सकता क्योंकि यह मौजूद नहीं है।" यह लाइन के शुरू में सही है।
विंडोस

1
@ जोशुआ, क्या आपने रिचर्ड्स की टिप्पणी (इस धागे में तीसरा) पढ़ी है और मेरे उत्तर को संपादित करें? यह केवल आपको कोई फाइल नहीं और कोई चाइल्ड डायरेक्टरी (यानी लीफ नोड्स) वाली डिरेक्ट्री देनी चाहिए
विंडोस

2

निम्नलिखित सबसे आसान तरीका है जिसे मैं कोड की एक पंक्ति के साथ इसे प्राप्त कर सकता हूं। यह वर्तमान स्थान पर खाली निर्देशिकाओं को सूचीबद्ध करता है। यदि पुनरावृत्ति की आवश्यकता है, तो पैरामीटर -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


2

इसे इस्तेमाल करे

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

गिनती 0 नहीं है, यह सभी अर्थों में मौजूद नहीं है कि निर्देशिका पूरी तरह से खाली है या अन्य पूरी तरह से खाली फ़ोल्डर रखती है


1

धन्यवाद, मैंने इसे अपनी स्क्रिप्ट के लिए एक आधार के रूप में इस्तेमाल किया। मैं खाली फ़ोल्डरों को हटाना चाहता था, लेकिन ऐसा करने की कोशिश कर रहा 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)
#>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.