Apakah mungkin di Windows untuk mendapatkan ukuran folder dari baris perintah tanpa menggunakan alat pihak ke-3?
Saya ingin hasil yang sama seperti yang Anda dapatkan ketika mengklik kanan folder di windows explorer → properti.
sumber
Apakah mungkin di Windows untuk mendapatkan ukuran folder dari baris perintah tanpa menggunakan alat pihak ke-3?
Saya ingin hasil yang sama seperti yang Anda dapatkan ketika mengklik kanan folder di windows explorer → properti.
Anda bisa menambahkan ukuran secara rekursif (berikut ini adalah file batch):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
Namun, ini memiliki beberapa masalah karena cmd
terbatas pada aritmatika integer bertanda 32-bit. Jadi akan mendapatkan ukuran di atas 2 GiB salah 1 . Lebih jauh lagi, ia mungkin akan menghitung symlink dan persimpangan beberapa kali sehingga paling baik merupakan batas atas, bukan ukuran sebenarnya (meskipun Anda akan memiliki masalah dengan alat apa pun).
Alternatifnya adalah PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
atau lebih pendek:
ls -r | measure -sum Length
Jika Anda menginginkannya lebih cantik:
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" }
}
Anda dapat menggunakan ini langsung dari cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 Saya memiliki perpustakaan bignum yang sebagian jadi dalam file batch di suatu tempat yang setidaknya mendapatkan tambahan integer presisi sewenang-wenang. Saya harus benar-benar melepaskannya, saya kira :-)
du
memberikan ukuran direktori tetapi yang dilakukannya hanyalah berjalan di pohon dan menyimpulkan. Sesuatu yang bisa diekspresikan dengan sangat elegan dalam pipa seperti di sini :-). Jadi untuk PowerShell, saya biasanya mencari cara Anda dapat menguraikan tujuan tingkat tinggi menjadi operasi tingkat rendah yang sesuai.folder\*
tidak berfungsi untuk saya ukuran folder yang saya letakkan di tempat itu menunjukkan 0 byte, Apakah ada solusi?Ada alat Windows bawaan untuk itu:
Ini akan mencetak banyak informasi yang tidak perlu tetapi akhirnya akan menjadi ukuran folder seperti ini:
Jika Anda perlu memasukkan folder tersembunyi tambahkan
/a
.sumber
Saya sarankan untuk mengunduh utilitas DU dari Sysinternals Suite yang disediakan oleh Microsoft di tautan ini http://technet.microsoft.com/en-us/sysinternals/bb896651
Saat Anda melakukannya, lihatlah utilitas lain. Mereka adalah penyelamat untuk setiap Windows Professional
sumber
\\live.sysinternals.com
jika masih ada). Saya sepenuh hati setuju, bahwa semua alat sysinternals harus dimasukkan secara default. Meskipun untuk banyak penggunaan PowerShell adalah pengganti yang cukup layak.Oneliner:
Sama tetapi hanya untuk Powershell:
Ini harus menghasilkan hasil sebagai berikut:
sumber
0.00 C:\Windows
dapatkah saya mengoptimalkan ini untuk semua folder, mencoba sudah berjalan sebagai adminft
(Format-Table
) bekerja. Anda dapat mencobafl
sebagai gantinya (Format-List
)Jika Anda telah menginstal git di komputer Anda (semakin umum) buka saja MINGW32 dan ketik:
du folder
sumber
du -h -d 1 folder | sort -h
jika Anda ingin ukuran yang dapat dibaca manusia, hanya satu tingkat subdirektori, dan urutkan berdasarkan ukuran.Saya merekomendasikan untuk menggunakan https://github.com/aleksaan/ utilitas utilitas. Sangat sederhana dan bermanfaat. Dan sangat cepat.
Ketikkan saja shell perintah
dan dapatkan daftar folder yang disusun berdasarkan ukuran
Contoh ini dieksekusi pada 272ms pada HDD.
Anda dapat meningkatkan kedalaman subfolder untuk dianalisis, misalnya:
dan dapatkan ukuran tidak hanya untuk folder yang dipilih tetapi juga untuk subfoldernya
* 3.5Tb di server telah dipindai selama 3m12s
sumber
Di sinilah kode PowerShell saya menulis ke daftar ukuran dan jumlah file untuk semua folder di bawah direktori saat ini. Jangan ragu untuk menggunakan kembali atau memodifikasi sesuai kebutuhan Anda.
sumber
$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}} }
Ini akan memberikan objek (lebih banyak Powershell-ish), 'FileCount' dan 'Size' adalah bilangan bulat (sehingga Anda dapat memprosesnya nanti, jika perlu), dan 'Ukuran' dalam byte, tetapi Anda dapat dengan mudah mengubahnya menjadi GB (atau unit yang Anda inginkan) dengan$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}} }
Kode ini diuji. Anda bisa memeriksanya lagi.
sumber
Saya kira ini hanya akan berfungsi jika direktori cukup statis dan isinya tidak berubah antara pelaksanaan perintah dua dir. Mungkin cara untuk menggabungkan ini menjadi satu perintah untuk menghindari itu, tetapi ini bekerja untuk tujuan saya (saya tidak ingin daftar lengkap; hanya ringkasannya).
Script GetDirSummary.bat:
Pemakaian:
GetDirSummary.bat c: \ temp
Keluaran:
sumber
Saya dapat
du.exe
distribusi git saya. Tempat lain mungkin adalah Microsoft atau Unxutils tersebut .Setelah Anda mendapat du.exe di jalur Anda. Ini
fileSizes.bat
milikmu :-)➪
sumber
Saya pikir satu-satunya pilihan Anda akan diruse (solusi pihak ke-3 yang sangat didukung):
Dapatkan ukuran file / direktori dari baris perintah
Sayangnya, Windows CLI sangat terbatas, Anda bisa menginstal Cygwin yang merupakan mimpi untuk digunakan dibandingkan dengan cmd. Itu akan memberi Anda akses ke du alat Unix porting yang merupakan dasar dari diruse pada windows.
Maaf saya tidak dapat menjawab pertanyaan Anda secara langsung dengan perintah yang dapat Anda jalankan di cli asli.
sumber
du
maka Cygwin adalah cara yang berlebihan. Pergilah dengan GnuWin32 .:: Dapatkan sejumlah baris yang dikembalikan oleh perintah Dir (/ -c untuk menghilangkan pemisah angka:.,) ["Tokens = 3" untuk melihat hanya pada kolom ketiga dari setiap baris dalam Dir]
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1
Jumlah garis kedua dari belakang, di mana jumlah byte dari jumlah file:
Akhirnya dapatkan jumlah byte di baris kedua dari belakang - kolom ke-3:
Karena tidak menggunakan pencarian kata, itu tidak akan memiliki masalah bahasa.
Keterbatasan:
sumber
Mencoba:
Ubah C: \ Program Files ke folder apa pun yang Anda inginkan dan ubah% A menjadi %% A jika menggunakan file batch
Ini mengembalikan ukuran seluruh folder, termasuk subfolder dan file sistem tersembunyi, dan bekerja dengan folder lebih dari 2GB
Itu menulis ke layar, jadi Anda harus menggunakan file sementara jika Anda tidak menginginkannya.
sumber
Script berikut dapat digunakan untuk mengambil dan mengakumulasikan ukuran setiap file di bawah folder yang diberikan.
Jalur folder
%folder%
dapat diberikan sebagai argumen untuk skrip ini (%1
).Pada akhirnya, hasilnya disimpan dalam parameter
%filesize%
Catatan: Metode
calcAccSize
ini juga dapat mencetak konten folder (dikomentari dalam contoh di atas)sumber
Jadi di sini adalah solusi untuk kedua permintaan Anda dengan cara yang Anda minta semula. Ini akan memberi file ukuran keterbacaan manusia tanpa batas filesize yang dialami semua orang. Kompatibel dengan Win Vista atau yang lebih baru. XP hanya tersedia jika Robocopy diinstal. Cukup jatuhkan folder pada file batch ini atau gunakan metode yang lebih baik yang disebutkan di bawah ini.
Agar dapat menggunakan file batch ini dengan mudah, letakkan di folder SendTo Anda. Ini akan memungkinkan Anda untuk mengklik kanan folder atau memilih folder, klik pada opsi SendTo, dan kemudian pilih file batch ini.
Untuk menemukan folder SendTo di komputer Anda cara paling sederhana adalah dengan membuka cmd lalu salin di baris ini apa adanya.
sumber
Saya memecahkan masalah yang sama. Beberapa metode di halaman ini lambat dan ada yang bermasalah di lingkungan multilanguage (semuanya anggap bahasa Inggris). Saya menemukan solusi sederhana menggunakan vbscript di cmd. Ini diuji dalam W2012R2 dan W7.
Ini mengatur variabel lingkungan S_. Anda dapat, tentu saja, mengubah baris terakhir untuk langsung menampilkan hasil ke misalnya
Anda dapat menggunakannya sebagai subrutin atau sebagai cmd standlone. Parameter adalah nama folder yang diuji ditutup dalam tanda kutip.
sumber
Metode termudah untuk mendapatkan ukuran total adalah PowerShell, tetapi masih dibatasi oleh fakta bahwa nama path yang lebih panjang dari 260 karakter tidak termasuk dalam total
sumber