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).