Czy w systemie Windows można uzyskać rozmiar folderu z wiersza poleceń bez użycia narzędzi innej firmy?
Chcę uzyskać taki sam rezultat, jaki można uzyskać, klikając prawym przyciskiem myszy folder w eksploratorze Windows → właściwości.
źródło
Czy w systemie Windows można uzyskać rozmiar folderu z wiersza poleceń bez użycia narzędzi innej firmy?
Chcę uzyskać taki sam rezultat, jaki można uzyskać, klikając prawym przyciskiem myszy folder w eksploratorze Windows → właściwości.
Możesz po prostu rekurencyjnie dodawać rozmiary (poniżej jest plik wsadowy):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
Jednak powoduje to kilka problemów, ponieważ cmd
jest ograniczone do 32-bitowej arytmetyki liczb całkowitych ze znakiem. Więc otrzyma rozmiary powyżej 2 GiB źle 1 . Co więcej, prawdopodobnie wiele razy policzy dowiązania symboliczne i połączenia, więc w najlepszym przypadku jest to górna granica, a nie rzeczywisty rozmiar (chociaż będziesz mieć ten problem z każdym narzędziem).
Alternatywą jest PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
lub krócej:
ls -r | measure -sum Length
Jeśli chcesz, żeby było ładniej:
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" }
}
Możesz tego użyć bezpośrednio z cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 Mam gdzieś częściowo ukończoną bibliotekę bignum w plikach wsadowych, która przynajmniej otrzymuje poprawne dodawanie liczb całkowitych o dowolnej precyzji. Chyba naprawdę powinienem to wypuścić :-)
du
podaje rozmiar katalogu, ale wszystko, co robi, to chodzenie po drzewie i podsumowywanie. Coś, co można bardzo elegancko wyrazić w potoku, jak tutaj :-). W przypadku PowerShell zwykle szukam sposobu, w jaki można rozłożyć cel wysokiego poziomu na odpowiednie operacje niższego poziomu.folder\*
nie działa dla mnie rozmiar folderu, który umieściłem w miejscu, pokazuje 0 bajtów, czy jest jakieś rozwiązanie?Jest do tego wbudowane narzędzie Windows :
Spowoduje to wydrukowanie wielu niepotrzebnych informacji, ale na końcu będzie taki rozmiar folderu:
Jeśli chcesz dołączyć ukryte foldery, dodaj
/a
.źródło
Proponuję pobrać narzędzie DU z pakietu Sysinternals Suite dostarczonego przez Microsoft pod tym linkiem http://technet.microsoft.com/en-us/sysinternals/bb896651
Kiedy już to zrobisz, spójrz na inne narzędzia. Są ratunkiem dla każdego systemu Windows Professional
źródło
\\live.sysinternals.com
jeśli nadal istnieje). Całkowicie zgadzam się jednak, że wszystkie narzędzia systemowe powinny być domyślnie włączone. Chociaż dla wielu zastosowań PowerShell jest całkiem godnym zamiennikiem.Oneliner:
To samo, ale tylko Powershell:
Powinno to dać następujący wynik:
źródło
0.00 C:\Windows
czy mogę to zoptymalizować dla wszystkich folderów, próbowałem już uruchomić jako adminft
(Format-Table
). Możesz spróbowaćfl
zamiast tego (Format-List
)Jeśli masz zainstalowanego git na swoim komputerze (staje się coraz bardziej powszechny), po prostu otwórz MINGW32 i wpisz:
du folder
źródło
du -h -d 1 folder | sort -h
jeśli chcesz mieć rozmiar czytelny dla człowieka, tylko jeden poziom podkatalogów i sortować według rozmiaru.Polecam skorzystać z https://github.com/aleksaan/diskusage narzędzia . Bardzo proste i pomocne. I bardzo szybko.
Po prostu wpisz powłokę poleceń
i uzyskaj listę folderów uporządkowanych według rozmiaru
Ten przykład został wykonany przy 272 ms na dysku twardym.
Możesz zwiększyć głębokość podfolderów do analizy, na przykład:
i uzyskaj rozmiary nie tylko dla wybranych folderów, ale także dla ich podfolderów
* 3,5 TB na serwerze zostało przeskanowane pod kątem 3m12s
źródło
Oto kod PowerShell, który piszę, aby wyświetlić rozmiar listy i liczbę plików dla wszystkich folderów w bieżącym katalogu. Zapraszam do ponownego wykorzystania lub modyfikacji zgodnie z potrzebami.
źródło
$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}} }
to zapewni obiekty (więcej Powershell-ish), „FileCount” i „Size” to liczby całkowite (więc w razie potrzeby można je później przetworzyć), a „Size” jest w bajtach, ale można je łatwo przekonwertować na GB (lub żądana jednostka) z$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}} }
Ten kod jest testowany. Możesz to sprawdzić ponownie.
źródło
Wydaje mi się, że zadziałałoby to tylko wtedy, gdy katalog jest dość statyczny, a jego zawartość nie zmienia się między wykonaniem dwóch poleceń dir. Może sposób na połączenie tego w jedno polecenie, aby tego uniknąć, ale to zadziałało w moim celu (nie chciałem pełnej listy; tylko podsumowanie).
Skrypt GetDirSummary.bat:
Stosowanie:
GetDirSummary.bat c: \ temp
Wynik:
źródło
Dostałem
du.exe
z moją dystrybucją git. Innym miejscem może być wspomniany wcześniej Microsoft lub Unxutils .Gdy już masz du.exe na swojej ścieżce. Oto twój
fileSizes.bat
:-)➪
źródło
Myślę, że jedyną opcją będzie diruse (wysoce obsługiwane rozwiązanie innej firmy):
Uzyskaj rozmiar pliku / katalogu z wiersza poleceń
Windows CLI jest niestety dość restrykcyjny, możesz alternatywnie zainstalować Cygwin, który jest marzeniem w porównaniu do cmd. To dałoby dostęp do przeniesionego narzędzia Unix du, które jest podstawą dirusów w systemie Windows.
Przepraszam, że nie mogłem odpowiedzieć na twoje pytania bezpośrednio poleceniem, które możesz uruchomić na natywnej klinie.
źródło
du
Cygwin to przesada. Po prostu idź z GnuWin32 .:: Pobierz liczbę wierszy zwracanych przez polecenia Dir (/ -c, aby wyeliminować separatory liczb:.,) ["Tokens = 3", aby spojrzeć tylko na trzecią kolumnę każdego wiersza w Dir]
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1
Numer przedostatniej linii, gdzie jest liczbą bajtów sumy plików:
Na koniec uzyskaj liczbę bajtów w przedostatnim wierszu - 3 kolumnie:
Ponieważ nie wykorzystuje wyszukiwania słów, nie miałby problemów językowych.
Ograniczenia:
źródło
Próbować:
Zmień C: \ Program Files na dowolny folder i zmień% A na %% A, jeśli używasz w pliku wsadowym
Zwraca rozmiar całego folderu, w tym podfolderów oraz plików ukrytych i systemowych, i współpracuje z folderami powyżej 2 GB
Zapisuje na ekranie, więc jeśli nie chcesz, będziesz musiał użyć pliku tymczasowego.
źródło
Poniższego skryptu można użyć do pobrania i zgromadzenia rozmiaru każdego pliku w danym folderze.
Ścieżkę do folderu
%folder%
można podać jako argument dla tego skryptu (%1
).Ostatecznie wyniki są przechowywane w parametrze
%filesize%
Uwaga: metoda
calcAccSize
może również wydrukować zawartość folderu (skomentowaną w powyższym przykładzie)źródło
Oto rozwiązanie dla obu twoich żądań w sposób, o który prosiłeś. Zapewni to rozmiar pliku czytelny dla człowieka bez ograniczeń rozmiaru pliku, z którymi wszyscy się spotykają. Kompatybilny z Win Vista lub nowszym. XP jest dostępny tylko wtedy, gdy zainstalowany jest Robocopy. Po prostu upuść folder na ten plik wsadowy lub użyj lepszej metody wymienionej poniżej.
Aby móc wygodnie korzystać z tego pliku wsadowego, umieść go w folderze SendTo. Umożliwi to kliknięcie folderu lub wybór folderów prawym przyciskiem myszy, kliknięcie opcji Wyślij do, a następnie wybranie tego pliku wsadowego.
Aby znaleźć folder SendTo na komputerze, najprostszym sposobem jest otwarcie polecenia cmd, a następnie skopiowanie w tym wierszu bez zmian.
źródło
Rozwiązałem podobny problem. Niektóre metody na tej stronie są powolne, a niektóre są problematyczne w środowisku wielojęzycznym (wszystkie zakładają angielski). Znalazłem proste obejście za pomocą vbscript w cmd. Jest testowany w W2012R2 i W7.
Ustawia zmienną środowiskową S_. Możesz oczywiście zmienić ostatnią linię, aby bezpośrednio wyświetlać wynik np
Możesz go używać jako podprogramu lub jako samodzielny cmd. Parametr to nazwa testowanego folderu zamknięta w cudzysłowie.
źródło
Najłatwiejszą metodą uzyskania tylko całkowitego rozmiaru jest PowerShell, ale nadal jest ograniczony faktem, że nazwy ścieżek dłuższe niż 260 znaków nie są uwzględniane w sumie
źródło