Si desea hacerlo cmd
, la siguiente es la forma trivial de hacerlo:
set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%
Eso supone la línea de comando. En un archivo por lotes harías
@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal
que hace las cosas un poco mejor. Puede soltarlo >nul
en un lote, ya set /a
que no mostrará el resultado si se ejecuta desde un archivo por lotes, lo hace directamente desde la línea de comandos. Además, el %
signo en el for
bucle debe duplicarse.
He visto bastantes casos en los que las personas prueban trucos ingeniosos find /c
. Tenga mucho cuidado con eso, ya que varias cosas pueden romper esto.
Errores comunes:
Usa find /c /v
e intenta encontrar algo que nunca se incluye en un nombre de archivo, como ::
. No lo haré Trabajo. Seguramente. Cuando la ventana de la consola está configurada con fuentes ráster, puede obtener esa combinación de caracteres. Puedo incluir caracteres en un nombre de archivo como :
, ?
etc., en sus variantes de ancho completo, por ejemplo, que luego se convertirán a sus contrapartes ASCII normales, lo que romperá esto. Si necesita un conteo preciso, no intente esto.
Usa find /c
e intenta encontrar algo que siempre se incluya en un nombre de archivo. Obviamente el punto ( .
) es una mala elección. Otra respuesta sugiere
dir /a-d | find /c ":"
que asume varias cosas sobre la configuración regional del usuario, no todas las cuales se garantiza que sean ciertas (he dejado un comentario que detalla los problemas allí) y devuelve un resultado demasiado.
En general, desea usar find
en el dir /b
que se eliminan todos los elementos que no son de nombre de archivo y se evitan así los errores de poste de cerca.
Entonces la variante elegante sería:
dir /b /a-d | find /c /v ""
que primero mostrará todos los nombres de archivo, una línea cada uno. Y luego cuente todas las líneas de esa salida que no estén vacías. Dado que el nombre del archivo no puede estar vacío (a menos que me falte algo, pero Unicode no lo activará de acuerdo con mis pruebas).