উইন্ডোজে কোনও তৃতীয় পক্ষের সরঞ্জাম ব্যবহার না করে কমান্ড লাইন থেকে কোনও ফোল্ডারের আকার পাওয়া সম্ভব?
উইন্ডোজ এক্সপ্লোরার → বৈশিষ্ট্যগুলির ফোল্ডারে ডান ক্লিক করার সময় আপনি যেভাবে ফলাফল পাবেন তা চাই।
উইন্ডোজে কোনও তৃতীয় পক্ষের সরঞ্জাম ব্যবহার না করে কমান্ড লাইন থেকে কোনও ফোল্ডারের আকার পাওয়া সম্ভব?
উইন্ডোজ এক্সপ্লোরার → বৈশিষ্ট্যগুলির ফোল্ডারে ডান ক্লিক করার সময় আপনি যেভাবে ফলাফল পাবেন তা চাই।
উত্তর:
আপনি কেবল পুনরাবৃত্ত আকারে মাপ যোগ করতে পারেন (নিম্নলিখিতটি একটি ব্যাচের ফাইল):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
তবে এটিতে বেশ কয়েকটি সমস্যা রয়েছে কারণ cmd
32-বিট স্বাক্ষরিত পূর্ণসংখ্যার গাণিতিকের মধ্যে সীমাবদ্ধ। সুতরাং এটি 2 জিআইবি ভুল 1 এর উপরে আকারগুলি পাবে । তদতিরিক্ত এটি সম্ভবত একাধিকবার সিমলিংক এবং জংশনগুলি গণনা করবে সুতরাং এটি সর্বোপরি একটি উচ্চতর আবদ্ধ, সঠিক আকার নয় (যদিও কোনও সরঞ্জামের সাথে আপনার এই সমস্যাটি থাকবে)।
একটি বিকল্প পাওয়ারশেল:
Get-ChildItem -Recurse | Measure-Object -Sum Length
বা সংক্ষিপ্ত:
ls -r | measure -sum Length
আপনি যদি এটি সুন্দর চান:
switch((ls -r|measure -sum Length).Sum) {
{$_ -gt 1GB} {
'{0:0.0} GiB' -f ($_/1GB)
break
}
{$_ -gt 1MB} {
'{0:0.0} MiB' -f ($_/1MB)
break
}
{$_ -gt 1KB} {
'{0:0.0} KiB' -f ($_/1KB)
break
}
default { "$_ bytes" }
}
আপনি এগুলি সরাসরি থেকে ব্যবহার করতে পারেন cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 আমার কোথাও ব্যাচ ফাইলগুলিতে একটি আংশিক-সমাপ্ত বিগনাম গ্রন্থাগার রয়েছে যা কমপক্ষে স্বেচ্ছাসেবী-নির্ভুলতা পূর্ণসংখ্যার যোগ হয় right আমার সত্যিই এটি ছেড়ে দেওয়া উচিত, আমার ধারণা :-)
du
ডিরেক্টরি আকার দেয় কিন্তু এটি যা করছে তা গাছের হাঁটাচলা এবং সংক্ষেপণ। এমন কিছু যা এখানে খুব সুন্দরভাবে পাইপলাইনে প্রকাশ করতে পারে :-)। সুতরাং পাওয়ারশেলের জন্য আমি সাধারণত সন্ধান করি আপনি কীভাবে উচ্চ-স্তরের লক্ষ্যটিকে উপযুক্ত নিম্ন-স্তরের ক্রিয়াকলাপগুলিতে পচন করতে পারেন।
folder\*
আমি যে ফোল্ডারটি জায়গায় রেখেছি তার আকারটি আমার জন্য কাজ করছে না যা 0 বাইট দেখায়, কোনও সমাধান আছে কি?
এর জন্য একটি বিল্ট-ইন উইন্ডোজ সরঞ্জাম রয়েছে :
dir /s 'FolderName'
এটি প্রচুর অপ্রয়োজনীয় তথ্য মুদ্রণ করবে তবে শেষটি ফোল্ডারের আকারের মতো হবে:
Total Files Listed:
12468 File(s) 182,236,556 bytes
আপনি যদি লুকানো ফোল্ডার যুক্ত করতে চান /a
।
আমি এই লিঙ্কটিতে মাইক্রোসফ্ট দ্বারা সরবরাহ করা সাইনটার্নালস স্যুট থেকে ইউটিলিটি ডিইউ ডাউনলোড করার পরামর্শ দিচ্ছি http://technet.microsoft.com/en-us/sysinternals/bb896651
usage: du [-c] [-l <levels> | -n | -v] [-u] [-q] <directory>
-c Print output as CSV.
-l Specify subdirectory depth of information (default is all levels).
-n Do not recurse.
-q Quiet (no banner).
-u Count each instance of a hardlinked file.
-v Show size (in KB) of intermediate directories.
C:\SysInternals>du -n d:\temp
Du v1.4 - report directory disk usage
Copyright (C) 2005-2011 Mark Russinovich
Sysinternals - www.sysinternals.com
Files: 26
Directories: 14
Size: 28.873.005 bytes
Size on disk: 29.024.256 bytes
আপনি যখন এটির দিকে যাচ্ছেন, অন্যান্য ইউটিলিটিগুলি একবার দেখুন। তারা প্রতিটি উইন্ডোজ পেশাদারের জন্য জীবনরক্ষক
\\live.sysinternals.com
এটি এখনও বিদ্যমান থাকলে ব্যবহার করে )। যদিও আমি আন্তরিকভাবে একমত হই যে, সমস্ত সিস্টেটারাল সরঞ্জামগুলি ডিফল্টরূপে অন্তর্ভুক্ত করা উচিত। যদিও অনেক ব্যবহারের জন্য পাওয়ারশেল বেশ উপযুক্ত প্রতিস্থাপন।
এক রৈখিক:
powershell -command "$fso = new-object -com Scripting.FileSystemObject; gci -Directory | select @{l='Size'; e={$fso.GetFolder($_.FullName).Size}},FullName | sort Size -Descending | ft @{l='Size [MB]'; e={'{0:N2} ' -f ($_.Size / 1MB)}},FullName"
একই তবে পাওয়ারশেল:
$fso = new-object -com Scripting.FileSystemObject
gci -Directory `
| select @{l='Size'; e={$fso.GetFolder($_.FullName).Size}},FullName `
| sort Size -Descending `
| ft @{l='Size [MB]'; e={'{0:N2} ' -f ($_.Size / 1MB)}},FullName
এটি নিম্নলিখিত ফলাফল উত্পাদন করা উচিত:
Size [MB] FullName
--------- --------
580,08 C:\my\Tools\mongo
434,65 C:\my\Tools\Cmder
421,64 C:\my\Tools\mingw64
247,10 C:\my\Tools\dotnet-rc4
218,12 C:\my\Tools\ResharperCLT
200,44 C:\my\Tools\git
156,07 C:\my\Tools\dotnet
140,67 C:\my\Tools\vscode
97,33 C:\my\Tools\apache-jmeter-3.1
54,39 C:\my\Tools\mongoadmin
47,89 C:\my\Tools\Python27
35,22 C:\my\Tools\robomongo
0.00 C:\Windows
আমি কি সমস্ত ফোল্ডারের জন্য এটি ইতিমধ্যে অপ্টিমাইজ করতে পারি, ইতিমধ্যে প্রশাসক হিসাবে চালানোর চেষ্টা করেছি
ft
( Format-Table
) কীভাবে কাজ করে। আপনি এর fl
পরিবর্তে ( Format-List
)
আপনি যদি নিজের কম্পিউটারে গিট ইনস্টল করেন (আরও বেশি বেশি সাধারণ হয়ে উঠছেন) কেবল এমএনডাব্লু 32 খুলুন এবং টাইপ করুন: du folder
du -h -d 1 folder | sort -h
যদি মানব পাঠযোগ্য আকার, কেবলমাত্র এক স্তর সাব-ডাইরেক্টরিজ এবং আকার অনুসারে বাছাই করতে চান তবে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন ।
আমি https://github.com/aleksaan/diskusage ইউটিলিটি ব্যবহার করার পরামর্শ দিই । খুব সহজ এবং সহায়ক। এবং খুব দ্রুত।
কমান্ড শেল টাইপ করুন
diskusage.exe -path 'd:/go; d:/Books'
এবং আকার অনুসারে সাজানো ফোল্ডারগুলির তালিকা পান
1. | ডিআইআর: ডি: / গো | সাইজ: 325.72 এমবি | ডেপথ: ১ 2. | ডিআইআর: ডি: / বইস | সাইজ: 14.01 এমবি | ডেপথ: ১
এই উদাহরণটি এইচডিডি তে 272 মিমি কার্যকর করা হয়েছিল ।
বিশ্লেষণের জন্য আপনি সাবফোল্ডারগুলির গভীরতা বৃদ্ধি করতে পারেন, উদাহরণস্বরূপ:
diskusage.exe -path 'd:/go; d:/Books' -depth 2
এবং কেবলমাত্র নির্বাচিত ফোল্ডারগুলির জন্য নয় এর সাবফোল্ডারগুলির জন্যও মাপ পান get
1. | ডিআইআর: ডি: / গো | সাইজ: 325.72 এমবি | ডেপথ: ১ 2. | ডিআইআর: ডি: / গো / পিকেজি | সাইজ: 212.88 এমবি | ডেপথ: 2 3. | ডিআইআর: ডি: / গো / এসসিআর | সাইজ: 62.57 এমবি | ডেপথ: ২ 4. | ডিআইআর: ডি: / গো / বিন | সাইজ: 30.44 এমবি | ডেপথ: 2 5. | ডিআর: ডি: / বই / দাবা | সাইজ: 14.01 এমবি | ডেপথ: 2 6. | ডিআইআর: ডি: / বইস | সাইজ: 14.01 এমবি | ডেপথ: ১ 7. | ডিআইআর: ডি: / গো / এপিআই | সাইজ: 6.41 এমবি | ডেপথ: 2 8. | ডিআইআর: ডি: / গো / টেস্ট | সাইজ: 5.11 এমবি | ডেপথ: 2 9. | ডিআইআর: ডি: / গো / ডক | সাইজ: 4.00 এমবি | ডেপথ: 2 10. | ডিআইআর: ডি: / গো / মিসক্ট | সাইজ: 3.82 এমবি | ডেপথ: 2 11. | ডিআইআর: ডি: / গো / লাইব | সাইজ: 358.25 কেবি | ডেপথ: 2
* সার্ভারের 3.5Tb 3m12 এস জন্য স্ক্যান করা হয়েছে
এখানে বর্তমান ডিরেক্টরি অধীন সমস্ত ফোল্ডারের আকার এবং ফাইলের গণনা তালিকা করতে আমি লিখছি একটি পাওয়ারশেল কোড। আপনার প্রয়োজন অনুযায়ী নিখরচায় পুনরায় ব্যবহার বা সংশোধন করুন।
$FolderList = Get-ChildItem -Directory
foreach ($folder in $FolderList)
{
set-location $folder.FullName
$size = Get-ChildItem -Recurse | Measure-Object -Sum Length
$info = $folder.FullName + " FileCount: " + $size.Count.ToString() + " Size: " + [math]::Round(($size.Sum / 1GB),4).ToString() + " GB"
write-host $info
}
$FolderList = Get-ChildItem -Directory -Force; $data = foreach ($folder in $FolderList) { set-location $folder.FullName; $size = Get-ChildItem -Recurse -Force | Measure-Object -Sum Length; $size | select @{n="Path"; e={$folder.Fullname}}, @{n="FileCount"; e={$_.count}}, @{n="Size"; e={$_.Sum}} }
এটি অবজেক্টগুলি সরবরাহ করবে (আরও পাওয়ারশেল-ইশ), 'ফাইলকাউন্ট' এবং 'আকার' পূর্ণসংখ্যা (যাতে আপনি পরে এগুলি প্রসেস করতে পারেন, প্রয়োজন হলে), এবং 'আকার' বাইটে রয়েছে, তবে আপনি সহজেই এটিকে রূপান্তর করতে পারেন জিবি (বা আপনি যে ইউনিটটি চান) এর সাথে $Data.Size / 1GB
।
$Data = dir -Directory -Force | %{ $CurrentPath = $_.FullName; Get-ChildItem $CurrentPath -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Sum Length | select @{n="Path"; e={$CurrentPath}}, @{n="FileCount"; e={$_.count}}, @{n="Size"; e={$_.Sum}} }
এই কোড পরীক্ষা করা হয়। আপনি এটি আবার পরীক্ষা করতে পারেন।
@ECHO OFF
CLS
SETLOCAL
::Get a number of lines contain "File(s)" to a mytmp file in TEMP location.
DIR /S /-C | FIND "bytes" | FIND /V "free" | FIND /C "File(s)" >%TEMP%\mytmp
SET /P nline=<%TEMP%\mytmp
SET nline=[%nline%]
::-------------------------------------
DIR /S /-C | FIND "bytes" | FIND /V "free" | FIND /N "File(s)" | FIND "%nline%" >%TEMP%\mytmp1
SET /P mainline=<%TEMP%\mytmp1
CALL SET size=%mainline:~29,15%
ECHO %size%
ENDLOCAL
PAUSE
আমি অনুমান করি যে এটি কেবল তখনই কাজ করবে যদি ডিরেক্টরিটি মোটামুটি স্থিতিশীল থাকে এবং এর বিষয়বস্তু দুটি dir কমান্ডের প্রয়োগের মধ্যে পরিবর্তন না করে। এটি এড়ানোর জন্য এটি একটি কমান্ডের সাথে একত্রিত করার কোনও উপায় হতে পারে তবে এটি আমার উদ্দেশ্যে কাজ করেছিল (আমি সম্পূর্ণ তালিকা চাইনি; কেবল সংক্ষিপ্তসার চাই)।
গেটডিরসমারি.বাট স্ক্রিপ্ট:
@echo off
rem get total number of lines from dir output
FOR /F "delims=" %%i IN ('dir /S %1 ^| find "asdfasdfasdf" /C /V') DO set lineCount=%%i
rem dir summary is always last 3 lines; calculate starting line of summary info
set /a summaryStart="lineCount-3"
rem now output just the last 3 lines
dir /S %1 | more +%summaryStart%
ব্যবহার:
গেটডিরসমারি.বাট সি: \ অস্থায়ী
আউটপুট:
Total Files Listed:
22 File(s) 63,600 bytes
8 Dir(s) 104,350,330,880 bytes free
আমি du.exe
আমার গিট বিতরণ সঙ্গে পেয়েছি । অন্য কোনও জায়গার উপরে মাইক্রোসফ্ট বা আনস্টিউটিলগুলি বর্ণিত হতে পারে ।
একবার আপনি নিজের পথে du.exe পেয়েছেন। এখানে আপনার fileSizes.bat
:-)
@echo ___________
@echo DIRECTORIES
@for /D %%i in (*) do @CALL du.exe -hs "%%i"
@echo _____
@echo FILES
@for %%i in (*) do @CALL du.exe -hs "%%i"
@echo _____
@echo TOTAL
@du.exe -sh "%CD%"
➪
___________
DIRECTORIES
37M Alps-images
12M testfolder
_____
FILES
765K Dobbiaco.jpg
1.0K testfile.txt
_____
TOTAL
58M D:\pictures\sample
আমি মনে করি আপনার একমাত্র বিকল্পটি হ্রাস করা হবে (একটি অত্যন্ত সমর্থিত তৃতীয় পক্ষের সমাধান):
কমান্ড লাইন থেকে ফাইল / ডিরেক্টরি আকার পান
উইন্ডোজ সিএলআই অনিচ্ছাকৃতভাবে বেশ সীমাবদ্ধ, আপনি বিকল্পভাবে ইনস্টল করতে পারেন সাইগউইন করতে পারেন যা সেন্টিমিডির তুলনায় ব্যবহার করার স্বপ্ন। এটি আপনাকে পোর্ট করা ইউনিক্স সরঞ্জাম ডুতে অ্যাক্সেস দেবে যা উইন্ডোতে ডায়রুজের ভিত্তি।
দুঃখিত, নেটিভ ক্লাইমে আপনি চালাতে পারেন এমন একটি আদেশ দিয়ে আমি সরাসরি আপনার প্রশ্নের উত্তর দিতে পারিনি।
:: বেশ কয়েকটি লাইন পান যা দির আদেশ দেয় (/ -সি নম্বর বিভাজকগুলি মুছে ফেলার জন্য:।,) ["দিরের প্রতিটি লাইনের তৃতীয় কলামটি দেখার জন্য" "টোকেন = 3"]
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1
পেনাল্টিমেট লাইনের সংখ্যা, যেখানে ফাইলগুলির যোগফলের বাইট সংখ্যা:
set /a line=%i%-1
অবশেষে পেনাল্টিমেট লাইনে বাইটের সংখ্যা পান - তৃতীয় কলাম:
set i=0
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO (
set /a i=!i!+1
set bytes=%%a
If !i!==%line% goto :size
)
:size
echo %bytes%
এটি শব্দ শব্দের ব্যবহার না করায় এটিতে ভাষার সমস্যা হবে না।
সীমাবদ্ধতা:
চেষ্টা করুন:
SET FOLDERSIZE=0
FOR /F "tokens=3" %A IN ('DIR "C:\Program Files" /a /-c /s ^| FINDSTR /C:" bytes" ^| FINDSTR /V /C:" bytes free"') DO SET FOLDERSIZE=%A
সি পরিবর্তন করুন: \ প্রোগ্রাম ফাইলগুলি যে কোনও ফোল্ডারে আপনি চান এবং তাতে ব্যাচ ফাইলে ব্যবহার করে% A% থেকে %% এ পরিবর্তন করুন
এটি সাব ফোল্ডার এবং লুকানো এবং সিস্টেম ফাইল সহ পুরো ফোল্ডারের আকার প্রদান করে এবং 2 জিবি-র বেশি ফোল্ডারগুলির সাথে কাজ করে
এটি স্ক্রিনে লিখতে পারে, তাই আপনি যদি না চান তবে আপনাকে একটি অন্তর্বর্তী ফাইল ব্যবহার করতে হবে।
নিম্নলিখিত লিপিটি প্রদত্ত ফোল্ডারের অধীনে প্রতিটি ফাইলের আকার আনতে এবং জমা করতে ব্যবহার করা যেতে পারে।
ফোল্ডার পাথটি %folder%
এই স্ক্রিপ্টের আর্গুমেন্ট হিসাবে দেওয়া যেতে পারে ( %1
)।
শেষ পর্যন্ত, ফলাফলগুলি প্যারামিটারে অনুষ্ঠিত হয়%filesize%
@echo off
SET count=1
SET foldersize=0
FOR /f "tokens=*" %%F IN ('dir /s/b %folder%') DO (call :calcAccSize "%%F")
echo %filesize%
GOTO :eof
:calcAccSize
REM echo %count%:%1
REM set /a count+=1
set /a foldersize+=%~z1
GOTO :eof
দ্রষ্টব্য: পদ্ধতিটি calcAccSize
ফোল্ডারের সামগ্রীও মুদ্রণ করতে পারে (উপরের উদাহরণে মন্তব্য করা)
সুতরাং আপনি উভয় অনুরোধের জন্য এখানে মূলত আপনি যেভাবে জিজ্ঞাসা করেছেন তার সমাধান। এটি ফাইলের আকারের সীমা ছাড়াই মানব পাঠযোগ্যতা ফাইলসাইজ দেবে যা প্রত্যেকে অভিজ্ঞতা করছে। উইন ভিস্তা বা আরও নতুনের সাথে সামঞ্জস্যপূর্ণ। এক্সপি কেবলমাত্র রবোকপি ইনস্টল থাকলে উপলব্ধ। এই ব্যাচ ফাইলে কেবল একটি ফোল্ডার ফেলে দিন বা নীচে বর্ণিত আরও ভাল পদ্ধতিটি ব্যবহার করুন।
@echo off
setlocal enabledelayedexpansion
set "vSearch=Files :"
For %%i in (%*) do (
set "vSearch=Files :"
For /l %%M in (1,1,2) do (
for /f "usebackq tokens=3,4 delims= " %%A in (`Robocopy "%%i" "%%i" /E /L /NP /NDL /NFL ^| find "!vSearch!"`) do (
if /i "%%M"=="1" (
set "filecount=%%A"
set "vSearch=Bytes :"
) else (
set "foldersize=%%A%%B"
)
)
)
echo Folder: %%~nxi FileCount: !filecount! Foldersize: !foldersize!
REM remove the word "REM" from line below to output to txt file
REM echo Folder: %%~nxi FileCount: !filecount! Foldersize: !foldersize!>>Folder_FileCountandSize.txt
)
pause
এই ব্যাচ ফাইলটি সহজেই আপনার সেন্ডটো ফোল্ডারে রেখে দিন। এটি আপনাকে ফোল্ডার বা ফোল্ডার নির্বাচন করতে ডান ক্লিক করতে, সেন্ডটো অপশনে ক্লিক করুন এবং তারপরে এই ব্যাচ ফাইলটি নির্বাচন করতে অনুমতি দেবে।
আপনার কম্পিউটারে সেন্ডটো ফোল্ডারটি সন্ধান করার সহজ উপায়টি হল সেন্টিমিডি খোলার পরে এই লাইনে অনুলিপি করুন।
explorer C:\Users\%username%\AppData\Roaming\Microsoft\Windows\SendTo
আমি একই সমস্যা সমাধান। এই পৃষ্ঠায় কয়েকটি পদ্ধতি ধীর এবং কিছুগুলি বহুভাষার পরিবেশে সমস্যাযুক্ত (সমস্ত ধরুন ইংরাজী)। আমি সেন্টিমিডিতে ভিবিএসক্রিপ্ট ব্যবহার করে সাধারণ কাজটি দেখতে পেয়েছি। এটি W2012R2 এবং ডাব্লু 7-তে পরীক্ষা করা হয়।
>%TEMP%\_SFSTMP$.VBS ECHO/Set objFSO = CreateObject("Scripting.FileSystemObject"):Set objFolder = objFSO.GetFolder(%1):WScript.Echo objFolder.Size
FOR /F %%? IN ('CSCRIPT //NOLOGO %TEMP%\_SFSTMP$.VBS') DO (SET "S_=%%?"&&(DEL %TEMP%\_SFSTMP$.VBS))
এটি পরিবেশ পরিবর্তনশীল S_ সেট করে। আপনি অবশ্যই অবশ্যই ফলাফল প্রদর্শন করতে শেষ লাইনটি উদাহরণস্বরূপ পরিবর্তন করতে পারেন
FOR /F %%? IN ('CSCRIPT //NOLOGO %TEMP%\_SFSTMP$.VBS') DO (ECHO "Size of %1 is %%?"&&(DEL %TEMP%\_SFSTMP$.VBS))
আপনি এটি সাবরুটাইন বা স্ট্যান্ডলোন সেমিডি হিসাবে ব্যবহার করতে পারেন। প্যারামিটার উদ্ধৃত বাক্সে পরীক্ষিত ফোল্ডারের নাম।