prompt de comando do Windows: como obter a contagem de todos os arquivos no diretório atual?

23

Qual comando você usaria em cmd.exe para encontrar o número de arquivos no diretório atual?

Existe uma opção de powershell aqui?

Atualização : Eu esperava evitar dir , pois sei que existem mais de 10.000 arquivos no diretório atual. Queria evitar a saída de enumeração para a janela cmd. Obrigada!

    
por p.campbell 08.02.2010 / 18:12

13 respostas

26

Se você quiser fazer isso com cmd , o seguinte é a maneira mais trivial de fazer isso:

set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%

Isso está assumindo a linha de comando. Em um arquivo de lote você faria

@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal

que faz as coisas um pouco mais agradáveis. Você pode descartar o >nul em um lote, pois set /a não exibirá o resultado se for executado a partir de um arquivo em lote - ele faz diretamente da linha de comando. Além disso, o sinal % no loop for deve ser duplicado.

Já vi alguns exemplos em que as pessoas tentam truques bacanas com find /c . Seja muito cuidadoso com aqueles, pois várias coisas podem quebrar isso.

Erros comuns:

  1. Usando find /c /v e tente encontrar algo que nunca é incluído em um nome de arquivo, como :: . Não vai. Trabalhos. De forma confiável. Quando a janela do console estiver configurada para fontes raster, você poderá obter essas combinações de caracteres. Posso incluir caracteres em um nome de arquivo como : , ? , etc. em suas variantes de largura total, por exemplo, que serão convertidos para seus equivalentes ASCII normais, o que quebrará isso. Se você precisar de uma contagem precisa, não tente isso.

  2. Usando find /c e tente encontrar algo que seja sempre incluído em um nome de arquivo. Obviamente, o ponto ( . ) é uma má escolha. Outra resposta sugere

    dir /a-d | find /c ":"
    

    que assume várias coisas sobre a localidade do usuário, nem todas com a garantia de serem verdadeiras (deixei um comentário detalhando os problemas lá) e retorna um resultado demais.

Geralmente, você deseja usar find on dir /b , que elimina todos os elementos que não são de nome de arquivo e evita erros de fencepost dessa maneira.

Então a variante elegante seria:

dir /b /a-d | find /c /v ""

, que primeiro irá mostrar todos os nomes dos arquivos, uma linha cada. E, em seguida, conte todas as linhas dessa saída que não estão vazias. Já que o nome do arquivo não pode estar vazio (a menos que eu esteja faltando alguma coisa, mas o Unicode não irá desabilitar isso de acordo com meus testes).

    
por 09.02.2010 / 18:31
17

Peça e recebereis: link

Counting the Number of Items in a Folder

Well, what do you know: it looks like the sun is finally coming out, which means it’s almost time for us to go. Before we do, however, let’s show you one last little trick with the Get-ChildItem cmdlet. Sometimes you don’t really need to know much about the files in a folder; all you really need to know is how many files (if any) can be found in a particular folder. Here’s how you can quickly count the number of files in a folder:

(Get-ChildItem C:\Scripts).Count

What are we doing here? We’re simply using Get-ChildItem to return a collection of all the items found in the folder C:\Scripts; because this is a collection, all we have to do is echo back the value of the Count property, which tells us the number of items in the collection. Note the use of parentheses: we enclose the Get-ChildItem command in parentheses to ensure that Windows PowerShell first grabs the collection and only then echoes back the value of the Count property for that collection.

And sure, you can include a filter when calling Get-ChildItem. Need to know how many .PS1 files are in the folder C:\Scripts? Okey-doke:

(Get-ChildItem C:\Scripts -filter "*.ps1").Count

FYI .. Eu pesquisei "arquivos de contagem do powershell".

    
por 08.02.2010 / 18:35
8
dir /a-d | find "File(s)"

Uma palavra de advertência sobre o uso do PowerShell para operações de arquivo simples como essa - é incrivelmente lenta em comparação ao cmd.exe, especialmente em conexões de rede ou quando há milhares de arquivos no diretório. Consulte esta postagem no fórum para obter mais informações.

    
por 07.04.2010 / 04:37
7

dir fornece a contagem total de arquivos na parte inferior.

    
por 08.02.2010 / 18:14
7

O método mais rápido que eu encontrei é executar o seguinte no console do PS.

[System.IO.Directory]::GetFiles($path).Count

em que $ path é um caminho local ou compartilhamento UNC.

    
por 30.05.2017 / 12:58
3

apenas conte linhas da saída dir / B (diretórios incluídos):% dir /B | find /c /v "~~~"

para apenas contar arquivos (sem dirs):% dir /A-D /B | find /c /v "~~~"

    
por 03.12.2012 / 14:20
2

Encontrado este na rede:

dir /a-d | find /c ":" > NUMfiles.###
set /p count=<NUMfiles.###
echo %count%

Eu testei e parece funcionar.

    
por 08.02.2010 / 18:21
2

Apenas uma advertência para aqueles que podem usar a resposta do PowerShell da Trevoke acima ( prompt de comando do Windows: como obter a contagem de todos os arquivos no diretório atual? ): por design, ecoando a propriedade Count de uma coleção retornada por Get-ChildItem pode fornecer resultados enganosos se o valor for 1 ou 0. Isso ocorre porque a propriedade Count está disponível apenas em matrizes. Se menos de dois itens forem retornados por Get-ChildItem, o resultado será escalar e .Count não retornará nada. Para contornar isso, explique-o explicitamente em uma matriz, por exemplo, @ (Get-ChildItem C: \ Scripts) .Count.

Para mais informações, consulte link ou link .

    
por 25.02.2011 / 01:16
0

dir retorna o número de arquivos e dirs na parte inferior

    
por 08.02.2010 / 18:15
0

O DIr obviamente funcionará

Sem instalar algo no servidor, mas com o powershell na sua estação de trabalho, você poderia fazer:

(gwmi -computer theserver -query "select *from cim_datafile where path = '\'").count

esse comando lhe dará todos os arquivos (sistema e ocultos incluídos) e como mencionado anteriormente se o powershell estiver na máquina, você pode simplesmente

(GCI c:\*.*).count

Note que se você não incluir o . você terá uma contagem de todos os arquivos e todos os diretórios. Você não incluirá arquivos ocultos e de sistema que você precisa adicionar -force para contar todos eles

    
por 08.02.2010 / 18:57
0

Se eu precisasse disso apenas uma vez, eu usaria o dir, senão eu consideraria o meu, provavelmente como um aplicativo C #, porque é com isso que eu estaria mais familiarizado (embora o VBScript ou o PowerShell também fosse viável).

(A propósito - não é DOS se você estiver usando o cmd.exe)

    
por 08.02.2010 / 19:05
0

Eu acredito que você pode usar attrib para obter a contagem de arquivos:

attrib.exe /s /D *.*|find /c /v "" >> filecount.txt

Isso criará um arquivo chamado filecount.txt no diretório atual com o número de arquivos e pastas no diretório atual (incluindo o arquivo recém-criado). Você pode mudar o

*.*

para

<full_path>\*.*

para obter a contagem de arquivos de um diretório específico. Remova a opção "/ D" se você não quiser contar as pastas. A opção "/ s" processa arquivos em todos os diretórios no caminho especificado. Então, remova-o se você quiser apenas arquivos no caminho especificado e não quiser incluir arquivos em subpastas.

Então, por exemplo, se você quiser descobrir quantos arquivos estão em sua unidade C: \ e não em qualquer subpasta, use o comando:

attrib.exe C:\*.* | find /c /v "" >> filecount.txt
    
por 08.02.2010 / 21:02
-2

Estou fazendo algo semelhante e isso funciona com qualquer número de arquivos instantaneamente.

Setlocal enabledelayedexpansion

Dir /A | find "File(s)" >tmp

For /F "tokens=1" %%i in (tmp) do set n=%%i

Del tmp

If !n! GEQ 10 echo Too many files in directory.
    
por 25.03.2016 / 04:33