अधिकांश विंडोज उपयोगकर्ता जानते हैं कि किसी फ़ोल्डर के आकार की जांच करने का सबसे आसान तरीका फ़ाइल एक्सप्लोरर में फ़ोल्डर गुणों को खोलना है। अधिक अनुभवी उपयोगकर्ता ट्रीसाइज़ . जैसे तृतीय-पक्ष टूल का उपयोग करना पसंद करते हैं या WinDirStat . हालाँकि, यदि आप विशिष्ट निर्देशिका में फ़ोल्डरों के आकार पर अधिक विस्तृत आँकड़े प्राप्त करना चाहते हैं या कुछ फ़ाइल प्रकारों को बाहर करना चाहते हैं, तो आप बेहतर तरीके से PowerShell सुविधाओं का उपयोग करेंगे। इस लेख में, हम आपको दिखाएंगे कि पावरशेल का उपयोग करके डिस्क (और सभी सबफ़ोल्डर्स) पर विशिष्ट फ़ोल्डर का आकार जल्दी से कैसे प्राप्त करें।
आप गेट-चाइल्डआइटम . का उपयोग कर सकते हैं (gci
उपनाम) और माप-वस्तु (measure
उपनाम) cmdlets PowerShell में फ़ाइलों और फ़ोल्डरों (सबफ़ोल्डर सहित) के आकार प्राप्त करने के लिए। पहला cmdlet आपको निर्दिष्ट मानदंड के अनुसार निर्दिष्ट निर्देशिका में फ़ाइलों की सूची (आकार के साथ) प्राप्त करने की अनुमति देता है, और दूसरा अंकगणितीय संचालन करता है।
उदाहरण के लिए, C:\ISO फ़ोल्डर का आकार प्राप्त करने के लिए, निम्न कमांड चलाएँ:
Get-ChildItem C:\ISO | Measure-Object -Property Length -sum
जैसा कि आप देख सकते हैं, इस निर्देशिका में फ़ाइलों का कुल आकार योग . में दिखाया गया है फ़ील्ड और लगभग 2.1 जीबी है (आकार बाइट्स में दिया गया है)।
आकार को अधिक सुविधाजनक MB या GB में बदलने के लिए, इस कमांड का उपयोग करें:
(gci c:\iso | measure Length -s).sum / 1Gb
या:
(gci c:\iso | measure Length -s).sum / 1Mb
परिणाम को दो दशमलव तक पूर्णांकित करने के लिए, निम्न कमांड चलाएँ:
"{0:N2} GB" -f ((gci c:\iso | measure Length -s).sum / 1Gb)
आप किसी निर्देशिका में एक निश्चित प्रकार की सभी फ़ाइलों के कुल आकार की गणना करने के लिए PowerShell का उपयोग कर सकते हैं। उदाहरण के लिए, आप एक फ़ोल्डर में सभी आईएसओ फाइलों का कुल आकार प्राप्त करना चाहते हैं:
(gci c:\iso *.iso | measure Length -s).sum / 1Mb
ऊपर दिखाए गए आदेश आपको निर्दिष्ट निर्देशिका में केवल फाइलों का कुल आकार प्राप्त करने की अनुमति देते हैं। यदि निर्देशिका में सबफ़ोल्डर हैं, तो सबफ़ोल्डर में फ़ाइलों के आकार की गणना नहीं की जाएगी। उपनिर्देशिकाओं सहित निर्देशिका में फ़ाइलों का कुल आकार प्राप्त करने के लिए, –Recurse
. का उपयोग करें पैरामीटर। आइए C:\Windows . में फ़ाइलों का कुल आकार प्राप्त करें फोल्डर :
"{0:N2} GB" -f ((gci –force c:\Windows –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)
छिपी हुई और सिस्टम फ़ाइलों के आकार को ध्यान में रखते हुए, मैंने –बल . का उपयोग किया है तर्क भी।
तो मेरे स्थानीय ड्राइव पर C:\Windows का आकार लगभग 40 GB है (स्क्रिप्ट NTFS संपीड़न को अनदेखा करता है)।
युक्ति . निर्देशिका पहुंच त्रुटियों को रोकने के लिए (PermissionDenied -> DirUnauthorizedAccessError), -ErrorAction SilentlyContinue
का उपयोग करें पैरामीटर।
यह स्क्रिप्ट किसी निर्देशिका के आकार की गलत गणना करती है यदि इसमें प्रतीकात्मक या हार्ड लिंक हैं। उदाहरण के लिए, C:\Windows
फ़ोल्डर में WinSxS फ़ोल्डर (Windows कंपोनेंट स्टोर) में फ़ाइलों के लिए कई हार्ड लिंक होते हैं। नतीजतन, ऐसी फाइलों को कई बार गिना जा सकता है। परिणामों में हार्ड लिंक को अनदेखा करने के लिए, निम्न आदेश का उपयोग करें (पूरा होने में लंबा समय लगता है):
"{0:N2} GB" -f ((gci –force C:\windows –Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LinkType -notmatch "HardLink" }| measure Length -s).sum / 1Gb)
जैसा कि आप देख सकते हैं, विंडोज़ फ़ोल्डर का वास्तविक आकार थोड़ा छोटा है।
अंतिम आकार की गणना करते समय विचार करने के लिए फ़ाइलों का चयन करने के लिए आप फ़िल्टर का उपयोग कर सकते हैं। उदाहरण के लिए, आप 2020 में बनाई गई फ़ाइलों का आकार प्राप्त कर सकते हैं:
(gci -force c:\ps –Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt ‘1/1/20’ -AND $_.CreationTime -lt ‘12/31/20’}| measure Length -s).sum / 1Gb
आप निर्दिष्ट निर्देशिका में सभी प्रथम-स्तरीय सबफ़ोल्डर का आकार प्राप्त कर सकते हैं। उदाहरण के लिए, आप C:\Users फ़ोल्डर में सभी उपयोगकर्ता प्रोफाइल का आकार प्राप्त करना चाहते हैं।
gci -force 'C:\Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$_.fullname, '{0:N2} GB' -f ($len / 1Gb)
}
%
foreach-object
. के लिए एक उपनाम है लूप।
चलो आगे बढ़ें। मान लीजिए, आपका कार्य सिस्टम हार्ड ड्राइव की जड़ में प्रत्येक निर्देशिका का आकार ढूंढना है और जानकारी को सुविधाजनक तालिका रूप में विश्लेषण के लिए प्रस्तुत करना है और फ़ोल्डर आकार के अनुसार क्रमबद्ध करने में सक्षम है।
सिस्टम C:\ ड्राइव पर निर्देशिकाओं के आकार के बारे में जानकारी प्राप्त करने के लिए, निम्न PowerShell स्क्रिप्ट चलाएँ:
$targetfolder='C:\'
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$foldername = $_.fullname
$foldersize= '{0:N2}' -f ($len / 1Gb)
$dataObject = New-Object PSObject
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldername” -value $foldername
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldersizeGb” -value $foldersize
$dataColl += $dataObject
}
$dataColl | Out-GridView -Title “Size of subdirectories”
जैसा कि आप देख सकते हैं, तालिका का ग्राफिक दृश्य दिखाई देना चाहिए जहां सिस्टम ड्राइव C:\ के रूट में सभी फ़ोल्डर्स और उनका आकार दिखाया गया है (तालिका Out-GridView
द्वारा उत्पन्न होती है) सीएमडीलेट)। कॉलम हेडर पर क्लिक करके, आप फ़ोल्डर्स को आकार के अनुसार क्रमबद्ध कर सकते हैं। आप परिणामों को CSV में भी निर्यात कर सकते हैं (| Export-Csv folder_size.csv
) या किसी एक्सेल फ़ाइल में।
यदि आप अपनी पॉवरशेल स्क्रिप्ट में निर्देशिका आकार जाँच का उपयोग कर रहे हैं, तो आप एक अलग फ़ंक्शन बना सकते हैं:
function Get-FolderSize {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
$Path
)
if ( (Test-Path $Path) -and (Get-Item $Path).PSIsContainer ) {
$Measure = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
$Sum = '{0:N2}' -f ($Measure.Sum / 1Gb)
[PSCustomObject]@{
"Path" = $Path
"Size($Gb)" = $Sum
}
}
}
फ़ंक्शन का उपयोग करने के लिए, बस एक तर्क के रूप में फ़ोल्डर पथ के साथ कमांड चलाएँ:
Get-FolderSize ('C:\PS')
आप Invoke-Command
के माध्यम से दूरस्थ कंप्यूटर पर फ़ोल्डर आकार की जांच करने के लिए अपने स्थानीय पावरशेल फ़ंक्शन का उपयोग कर सकते हैं (पावरशेल रिमोटिंग) cmdlet.
Invoke-Command -ComputerName hq-srv01 -ScriptBlock ${Function:Get-FolderSize} –ArgumentList 'C:\PS'
ये आदेश PowerShell Core 7.x के नए संस्करणों सहित सभी PowerShell संस्करणों में काम करते हैं।