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:
-
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. -
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 sugeredir /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).