Se você quiser fazer isso cmd
, a seguir é a maneira 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 em lotes, você faria
@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal
o que faz as coisas um pouco melhor. Você pode soltar o >nul
em um lote, pois set /a
não exibirá o resultado se for executado a partir de um arquivo em lotes - é exibido diretamente na linha de comando. Além disso, o %
sinal no for
loop deve ser duplicado.
Eu já vi alguns casos em que as pessoas tentam truques bacanas find /c
. Tenha muito cuidado com eles, pois várias coisas podem quebrar isso.
Erros comuns:
Usando find /c /v
e tente encontrar algo que nunca seja incluído em um nome de arquivo, como ::
. Não vai. Trabalhos. Confiavelmente. Quando a janela do console está configurada para fontes rasterizadas, você pode obter essa combinação de caracteres. I pode incluir caracteres em um nome de arquivo, como :
, ?
, etc., em suas variantes de largura total, por exemplo, que, em seguida, são convertidos para seus equivalentes ASCII normais que vai quebrar isso. Se você precisar de uma contagem precisa, não tente isso.
Usando find /c
e tente encontrar algo que esteja 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 são verdadeiras (deixei um comentário detalhando os problemas lá) e retorna um resultado em excesso.
Geralmente, você quer usar find
em dir /b
que corta todo o material não-nome do arquivo e evita fencepost erros dessa forma.
Portanto, a variante elegante seria:
dir /b /a-d | find /c /v ""
que produzirá primeiro todos os nomes de arquivos, uma linha cada. E depois conte todas as linhas dessa saída que não estão vazias. Como o nome do arquivo não pode estar vazio (a menos que esteja faltando alguma coisa, mas o Unicode não fará isso de acordo com meus testes).
dir /b /a-d | find /c /v ""
%count%
é expandido no momento da análise.Peça e você receberá: http://technet.microsoft.com/en-us/library/ee692796.aspx
FYI .. Pesquisei "arquivos de contagem de PowerShell".
fonte
(Get-ChildItem -recurse -filter "*.ps1").Count
Uma palavra de aviso sobre o uso do PowerShell para operações simples de arquivos como esta - é incrivelmente lento em comparação com o cmd.exe, especialmente em conexões de rede ou quando existem milhares de arquivos no diretório. Consulte esta postagem no fórum para obter mais informações.
fonte
dir
fornece a contagem total de arquivos na parte inferior.fonte
dir > file
.. ahh, eu sinto falta do POSIXdir > file
não funcionar no Windows? O redirecionamento de saída não é exatamente mágico, você sabe.dir | grep (something)
para evitar a lenta gravação na tela que atrasa as coisas (e minimiza-as completamente).O método mais rápido que encontrei é executar o seguinte no console PS.
onde $ path é um caminho local ou compartilhamento UNC.
fonte
conte apenas as 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 "~~~"
fonte
Encontrei isso na net:
Eu testei e parece funcionar.
fonte
dir
comando inclui uma linha com dois pontos que não é um arquivo. (2) Isso depende do formato da hora para incluir dois pontos, o que não necessariamente precisa ser assim. (3) Ele se baseia no formato numérico que não inclui dois pontos, o que também não precisa necessariamente ser assim. Além disso, passar por um arquivo aqui é desnecessário e não funcionará se você não tiver acesso de gravação - má ideia.Apenas uma ressalva para aqueles que podem usar a resposta do Trevoke no PowerShell acima ( prompt de comando do Windows: como obter a contagem de todos os arquivos no diretório atual? ): Por design, ecoar 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 2 itens forem retornados por Get-ChildItem, o resultado será escalar e .Count retornará nada. Para contornar isso, expresse-o explicitamente em uma matriz, por exemplo, @ (Get-ChildItem C: \ Scripts) .Count.
Para obter mais informações, consulte http://connect.microsoft.com/PowerShell/feedback/details/354672/get-childitem-count-problem-with-one-file ou http://www.vistax64.com/powershell/266379 -get-childitem-count-not-working-one-file.html .
fonte
dir
retorna o número de arquivos e diretórios na parte inferiorfonte
É claro que o trabalho funcionará
Sem instalar algo no servidor, mas com o PowerShell em sua estação de trabalho, você pode:
esse comando fornecerá todos os arquivos (sistema e oculto incluídos) e, como mencionado anteriormente, se o PowerShell estiver na máquina, você pode simplesmente
Observe que se você não incluir o . você receberá uma contagem de todos os arquivos e diretórios. Você não incluirá arquivos ocultos e do sistema que você precisa adicionar -force para contar todos eles
fonte
Se eu precisasse disso apenas uma vez, usaria o dir, caso contrário, consideraria usar o dir, provavelmente como um aplicativo C # porque é com isso que eu estaria mais familiarizado (embora o VBScript ou o PowerShell também sejam viáveis).
(A propósito - não é o DOS se você estiver usando o cmd.exe)
fonte
Eu acredito que você pode usar o attrib para obter a contagem de arquivos:
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
para obter a contagem de arquivos de um diretório específico. Remova a opção "/ D" se você não quiser contar pastas. A opção "/ s" processa arquivos em todos os diretórios no caminho especificado. Portanto, remova-o se você deseja apenas arquivos no caminho especificado e não deseja incluir arquivos nas subpastas.
Por exemplo, se você deseja descobrir quantos arquivos há na sua unidade C: \ e não em nenhuma subpasta, use o comando:
fonte
Estou fazendo algo semelhante e isso funciona com qualquer número de arquivos instantaneamente.
fonte
find
não é uma boa ideia. Veja a resposta aceita para obter detalhes.