Você pode adicionar tamanhos de forma recursiva (a seguir, um arquivo em lotes):
@echo off
set size=0
for /r %%x in (folder\*) do set /a size+=%%~zx
echo %size% Bytes
No entanto, isso tem vários problemas porque cmd
é limitado à aritmética de número inteiro assinado de 32 bits. Portanto, obterá tamanhos acima de 2 GiB incorretos 1 . Além disso, provavelmente contará links simbólicos e junções várias vezes, portanto, na melhor das hipóteses, é um limite superior, não o tamanho real (você terá esse problema com qualquer ferramenta).
Uma alternativa é o PowerShell:
Get-ChildItem -Recurse | Measure-Object -Sum Length
ou mais curto:
ls -r | measure -sum Length
Se você quiser mais bonito:
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" }
}
Você pode usar isso diretamente em cmd
:
powershell -noprofile -command "ls -r|measure -sum Length"
1 Eu tenho uma biblioteca bignum parcialmente finalizada em arquivos em lote em algum lugar que, pelo menos, acerta a adição inteira de precisão arbitrária. Eu realmente deveria liberá-lo, eu acho :-)
du
fornece o tamanho do diretório, mas tudo o que está fazendo é andar na árvore e resumir. Algo que pode ser muito elegantemente expresso em um pipeline como aqui :-). Portanto, para o PowerShell, costumo procurar como decompor a meta de alto nível em operações adequadas de nível inferior.folder\*
não está funcionando para mim o tamanho da pasta que eu coloquei no local mostra 0 bytes, existe alguma solução?Há uma ferramenta interna do Windows para isso:
Isso imprimirá muitas informações desnecessárias, mas o final será o tamanho da pasta assim:
Se você precisar incluir pastas ocultas, adicione
/a
.fonte
Sugiro baixar o utilitário DU do Sysinternals Suite, fornecido pela Microsoft neste link http://technet.microsoft.com/en-us/sysinternals/bb896651
Enquanto você está nisso, dê uma olhada nos outros utilitários. Eles economizam a vida de todos os profissionais do Windows
fonte
\\live.sysinternals.com
se ainda existir). No entanto, concordo plenamente que todas as ferramentas sysinternals devem ser incluídas por padrão. Embora para muitos usos, o PowerShell seja um substituto bastante digno.Oneliner:
O mesmo, mas apenas o PowerShell:
Isso deve produzir o seguinte resultado:
fonte
0.00 C:\Windows
I pode otimizar isso para todas as pastas, já tentou correr como adminft
(Format-Table
) funciona. Você pode tentarfl
em vez disso (Format-List
)Se você tem o git instalado no seu computador (ficando cada vez mais comum), basta abrir o MINGW32 e digite:
du folder
fonte
du -h -d 1 folder | sort -h
se desejar tamanho legível por humanos, apenas um nível de subdiretórios e classificar por tamanho.Eu recomendo usar o https://github.com/aleksaan/diskusage . Muito simples e útil. E muito rápido.
Basta digitar um shell de comando
e obtenha uma lista de pastas organizadas por tamanho
Este exemplo foi executado em 272ms no HDD.
Você pode aumentar a profundidade das subpastas para analisar, por exemplo:
e obtenha tamanhos não apenas para as pastas selecionadas, mas também para suas subpastas
* 3.5Tb no servidor foi verificado por 3m12s
fonte
Aí vem um código do PowerShell que escrevo para listar o tamanho e a contagem de arquivos de todas as pastas no diretório atual. Sinta-se livre para reutilizar ou modificar de acordo com sua necessidade.
fonte
$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}} }
isso fornecerá objetos (mais Powershell-ish), 'FileCount' e 'Size' são números inteiros (para que você possa processá-los mais tarde, se necessário), e 'Size' está em bytes, mas você pode convertê-lo facilmente em GB (ou a unidade que você deseja) com$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}} }
Este código é testado. Você pode verificar novamente.
fonte
Eu acho que isso só funcionaria se o diretório fosse bastante estático e seu conteúdo não fosse alterado entre a execução dos dois comandos dir. Talvez uma maneira de combinar isso em um comando para evitar isso, mas funcionou para o meu propósito (eu não queria a lista completa; apenas o resumo).
Script GetDirSummary.bat:
Uso:
GetDirSummary.bat c: \ temp
Resultado:
fonte
Eu recebi
du.exe
minha distribuição git. Outro local pode ser o Microsoft ou Unxutils acima mencionados .Depois de obter o du.exe no seu caminho. Aqui está o seu
fileSizes.bat
:-)➪
fonte
Eu acho que sua única opção será diruse (uma solução de terceiros altamente suportada):
Obter tamanho do arquivo / diretório na linha de comando
A CLI do Windows é infelizmente bastante restritiva, você pode instalar o Cygwin como alternativa que é um sonho para ser usado em comparação com o cmd. Isso daria acesso à ferramenta Unix portada, que é a base do diruse no Windows.
Desculpe, não foi possível responder suas perguntas diretamente com um comando que você pode executar no CLI nativo.
fonte
du
, Cygwin é um exagero. Basta ir com o GnuWin32 .:: Obtenha um número de linhas que os comandos Dir retornam (/ -c para eliminar os separadores de números:.,) ["Tokens = 3" para examinar apenas a terceira coluna de cada linha em Dir]
FOR /F "tokens=3" %%a IN ('dir /-c "%folderpath%"') DO set /a i=!i!+1
Número da penúltima linha, onde é o número de bytes da soma dos arquivos:
Finalmente, obtenha o número de bytes na penúltima linha - terceira coluna:
Como não usa a pesquisa por palavras, não haveria problemas de idioma.
Limitações:
fonte
Experimentar:
Altere C: \ Arquivos de programas para a pasta desejada e altere% A para %% A se estiver usando em um arquivo em lotes
Ele retorna o tamanho de toda a pasta, incluindo subpastas e arquivos ocultos e do sistema, e funciona com pastas com mais de 2 GB
Ele grava na tela, então você terá que usar um arquivo provisório se não quiser.
fonte
O script a seguir pode ser usado para buscar e acumular o tamanho de cada arquivo em uma determinada pasta.
O caminho da pasta
%folder%
pode ser fornecido como argumento para este script (%1
).Por fim, os resultados são mantidos no parâmetro
%filesize%
Nota: O método
calcAccSize
também pode imprimir o conteúdo da pasta (comentado no exemplo acima)fonte
Então, aqui está uma solução para os seus pedidos da maneira que você solicitou originalmente. Isso dará ao usuário legibilidade do tamanho do arquivo, sem os limites de tamanho que todos estão enfrentando. Compatível com Win Vista ou mais recente. XP disponível apenas se o Robocopy estiver instalado. Basta soltar uma pasta nesse arquivo em lotes ou usar o melhor método mencionado abaixo.
Para poder usar esse arquivo em lotes, coloque-o convenientemente na pasta SendTo. Isso permitirá que você clique com o botão direito do mouse em uma pasta ou em uma seleção de pastas, clique na opção SendTo e selecione esse arquivo em lotes.
Para encontrar a pasta SendTo no seu computador, a maneira mais simples é abrir o cmd e copiar nesta linha como está.
fonte
Eu resolvi um problema semelhante. Alguns dos métodos desta página são lentos e outros são problemáticos em um ambiente multilíngue (todos supõem inglês). Eu encontrei uma solução simples usando vbscript no cmd. É testado em W2012R2 e W7.
Ele configurou a variável de ambiente S_. Obviamente, você pode alterar a última linha para exibir diretamente o resultado para, por exemplo,
Você pode usá-lo como sub-rotina ou como cmd independente. Parâmetro é o nome da pasta testada fechada entre aspas.
fonte
O método mais fácil de obter apenas o tamanho total é o PowerShell, mas ainda é limitado pelo fato de os nomes de caminhos com mais de 260 caracteres não serem incluídos no total.
fonte