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).
dir /b /a-d | find /c /v ""
%count%
se expande en el momento del análisis.Pregunte y recibirá: http://technet.microsoft.com/en-us/library/ee692796.aspx
FYI ... busqué en Google "archivos de recuento de PowerShell".
fuente
(Get-ChildItem -recurse -filter "*.ps1").Count
Una advertencia sobre el uso de PowerShell para operaciones de archivo simples como esta: es increíblemente lento en comparación con cmd.exe, especialmente a través de conexiones de red o cuando hay miles de archivos en el directorio. Vea esta publicación en el foro para más información.
fuente
dir
le da el recuento total de archivos en la parte inferior.fuente
dir > file
.. ahh me olvido de POSIXdir > file
que no debería funcionar en Windows? La redirección de salida no es exactamente mágica, ya sabes.dir | grep (something)
para evitar la escritura lenta en pantalla que ralentiza las cosas (y la minimiza por completo).El método más rápido que he encontrado es ejecutar lo siguiente en la consola PS.
donde $ ruta es una ruta local o un recurso compartido UNC.
fuente
solo cuente las líneas de la salida dir / B (directorios incluidos):
dir /B | find /c /v "~~~"
solo para contar archivos (sin directorios):
dir /A-D /B | find /c /v "~~~"
fuente
Encontré esto en la red:
Lo probé y parece funcionar.
fuente
dir
comando incluye una línea con dos puntos que no es un archivo. (2) Esto se basa en el formato de hora para incluir dos puntos, que no necesariamente tiene que ser así. (3) Se basa en el formato de número sin incluir dos puntos, que tampoco necesariamente tiene que ser así. Además, revisar un archivo aquí es innecesario y no funcionará si no tiene acceso de escritura, mala idea.Solo una advertencia para aquellos que podrían usar la respuesta de PowerShell de Trevoke anterior ( símbolo del sistema de Windows: ¿cómo obtener el recuento de todos los archivos en el directorio actual? ): Por diseño, hacer eco de la propiedad Count de una colección devuelta por Get-ChildItem puede dar resultados engañosos si el valor es 1 o 0. Esto se debe a que la propiedad Count solo está disponible en matrices. Si Get-ChildItem devuelve menos de 2 elementos, el resultado es escalar y .Count no devuelve nada. Para evitar esto, explíquelo explícitamente en una matriz, por ejemplo, @ (Get-ChildItem C: \ Scripts) .Count.
Para obtener más información, consulte http://connect.microsoft.com/PowerShell/feedback/details/354672/get-childitem-count-problem-with-one-file o http://www.vistax64.com/powershell/266379 -get-childitem-count-not-working-one-file.html .
fuente
dir
devuelve el número de archivos y directorios en la parte inferiorfuente
DIr por supuesto funcionará
Sin instalar algo en el servidor pero con powershell en su estación de trabajo, podría hacer:
ese comando le dará todos los archivos (sistema y oculto incluidos) y, como se mencionó anteriormente, si powershell está en la máquina, simplemente puede
Tenga en cuenta que si no incluye el . obtendrá un recuento de todos los archivos y todos los directorios. No incluirá archivos ocultos y del sistema que necesita agregar -force para contarlos a todos
fuente
Si solo necesitara esto una vez, solo usaría dir, de lo contrario, consideraría crear el mío, probablemente como una aplicación C # porque eso es con lo que estaría más familiarizado (aunque VBScript o PowerShell también serían viables).
(Por cierto, no es DOS si está usando cmd.exe)
fuente
Creo que puede usar attrib para obtener el recuento de archivos:
Esto creará un archivo llamado filecount.txt en el directorio actual con el número de archivos y carpetas en el directorio actual (incluido el archivo recién creado). Puedes cambiar el
a
para obtener el recuento de archivos de un directorio particular. Elimine la opción "/ D" si no desea contar las carpetas. La opción "/ s" procesa archivos en todos los directorios en la ruta especificada. Así que elimínelo si solo desea archivos en la ruta especificada y no desea incluir archivos en subcarpetas.
Entonces, por ejemplo, si desea averiguar cuántos archivos hay en su unidad C: \ y no en ninguna subcarpeta, usaría el comando:
fuente
Estoy haciendo algo similar y esto funciona con cualquier número de archivos al instante.
fuente
find
no es una buena idea. Vea la respuesta aceptada para más detalles.