web-dev-qa-db-fra.com

Invite de commandes Windows: comment obtenir le nombre de tous les fichiers du répertoire actuel?

Quelle commande utiliseriez-vous dans cmd.exe pour trouver le nombre de fichiers dans le répertoire courant?

Y a-t-il une option PowerShell ici?

pdate: J'espérais éviter dir, car je sais qu'il y a plus de 10 000 fichiers dans le répertoire actuel. Je voulais éviter la sortie de l'énumération dans la fenêtre cmd. Je vous remercie!

24
p.campbell

Si vous voulez le faire avec cmd, voici la manière la plus simple de le faire:

set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%

Cela suppose la ligne de commande. Dans un fichier batch, vous feriez

@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal

ce qui fait les choses un peu mieux. Vous pouvez supprimer le >nul dans un lot, puisque set /a n'affichera pas le résultat s'il est exécuté à partir d'un fichier de commandes — il le fait directement à partir de la ligne de commande. De plus, le % le signe dans la boucle for doit être doublé.

J'ai vu pas mal de cas où les gens essayent des astuces astucieuses avec find /c. Soyez très prudent avec ceux-ci, car diverses choses peuvent casser cela.

Erreurs fréquentes:

  1. En utilisant find /c /v et essayez de trouver quelque chose qui n'est jamais inclus dans un nom de fichier, comme ::. Habitude. Travail. De manière fiable. Lorsque la fenêtre de la console est définie sur des polices raster, vous pouvez obtenir ces combinaisons de caractères. Je peux inclure des caractères dans un nom de fichier tels que :, ?, etc. dans leurs variantes pleine largeur par exemple, qui seront ensuite converties en leurs équivalents normaux ASCII qui briseront cela. Si vous avez besoin d'un décompte précis, n'essayez pas cette.

  2. En utilisant find /c et essayez de trouver quelque chose qui est toujours inclus dans un nom de fichier. Évidemment, le point (.) est un mauvais choix. Une autre réponse suggère

    dir /a-d | find /c ":"
    

    ce qui suppose plusieurs choses sur les paramètres régionaux de l'utilisateur, qui ne sont pas toutes garanties être vraies (j'ai laissé un commentaire détaillant les problèmes là-bas) et renvoie un résultat de trop.

En règle générale, vous souhaitez utiliser find sur dir /b, ce qui supprime tous les éléments sans nom de fichier et évite ainsi les erreurs fencepost.

La variante élégante serait donc:

dir /b /a-d | find /c /v ""

qui affichera d'abord tous les noms de fichiers, une ligne chacun. Et puis comptez toutes les lignes de cette sortie qui ne sont pas vides. Étant donné que le nom de fichier ne peut pas être vide (sauf s'il me manque quelque chose, mais Unicode ne déclenchera pas cela selon mes tests).

28
Joey

Demandez et vous recevrez: http://technet.Microsoft.com/en-us/library/ee692796.aspx

Compter le nombre d'éléments dans un dossier

Eh bien, que savez-vous: on dirait que le Soleil sort enfin, ce qui signifie qu'il est presque temps pour nous de partir. Avant de le faire, cependant, nous allons vous montrer une dernière petite astuce avec l'applet de commande Get-ChildItem. Parfois, vous n'avez pas vraiment besoin d'en savoir beaucoup sur les fichiers d'un dossier; tout ce que vous devez vraiment savoir, c'est combien de fichiers (le cas échéant) peuvent être trouvés dans un dossier particulier. Voici comment vous pouvez compter rapidement le nombre de fichiers dans un dossier:

(Get-ChildItem C:\Scripts).Count

Que faisons-nous ici? Nous utilisons simplement Get-ChildItem pour renvoyer une collection de tous les éléments trouvés dans le dossier C:\Scripts; car il s'agit d'une collection, tout ce que nous avons à faire est de renvoyer la valeur de la propriété Count, qui nous indique le nombre d'éléments dans la collection. Notez l'utilisation de parenthèses: nous plaçons la commande Get-ChildItem entre parenthèses pour nous assurer que Windows PowerShell récupère d'abord la collection, puis seulement renvoie la valeur de la propriété Count pour cette collection.

Et bien sûr, vous pouvez inclure un filtre lors de l'appel de Get-ChildItem. Besoin de savoir combien de fichiers .PS1 se trouvent dans le dossier C:\Scripts? Okey-doke:

(Get-ChildItem C:\Scripts -filter "*.ps1").Count

FYI .. J'ai googlé "fichiers de comptage PowerShell".

17
Trevoke
dir /a-d | find "File(s)"

Un mot d'avertissement sur l'utilisation de PowerShell pour des opérations de fichiers simples comme celle-ci - c'est incroyablement lent par rapport à cmd.exe, en particulier sur les connexions réseau ou lorsqu'il y a des milliers de fichiers dans le répertoire. Voir ce message sur le forum pour plus d'informations.

8
rossnz

dir vous donne le nombre total de fichiers en bas.

7
lorenzog

La méthode la plus rapide que j'ai trouvée consiste à exécuter ce qui suit dans la console PS.

[System.IO.Directory]::GetFiles($path).Count

où $ path est un chemin local ou un partage UNC.

7
John Brooks

comptez simplement les lignes de la sortie dir/B (répertoires inclus):
dir /B | find /c /v "~~~"

pour juste compter les fichiers (sans dir):
dir /A-D /B | find /c /v "~~~"

3
Garcia

Trouvé ce sur le net:

dir /a-d | find /c ":" > NUMfiles.###
set /p count=<NUMfiles.###
echo %count%

J'ai testé et ça semble marcher.

2
Kelsey

Juste une mise en garde pour ceux qui pourraient utiliser la réponse PowerShell de Trevoke ci-dessus ( invite de commande Windows: comment obtenir le nombre de tous les fichiers dans le répertoire actuel? ): par conception, faisant écho à la propriété Count d'une collection retournée par Get-ChildItem peut donner des résultats trompeurs si la valeur est 1 ou 0. En effet, la propriété Count n'est disponible que sur les tableaux. Si moins de 2 éléments sont renvoyés par Get-ChildItem, le résultat est scalaire et .Count ne renvoie rien. Pour contourner ce problème, cassez-le explicitement dans un tableau, par exemple, @ (Get-ChildItem C:\Scripts) .Count.

Pour plus d'informations, voir 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 .

2
Heather M.

dir renvoie le nombre de fichiers et de répertoires en bas

0
dyasny

DIr fonctionnera bien sûr

Sans installer quelque chose sur le serveur mais avec PowerShell sur votre poste de travail, vous pouvez faire:

(gwmi -computer theserver -query "select *from cim_datafile where path = '\\'").count

cette commande vous donnera tous les fichiers (système et caché inclus) et comme mentionné précédemment si PowerShell est sur la machine, vous pouvez simplement

(GCI c:\*.*).count

Notez que si vous n'incluez pas . vous obtiendrez un décompte de tous les fichiers et de tous les répertoires. Vous n'incluerez pas les fichiers cachés et système que vous devez ajouter -force pour les compter tous

0
Jim B

Si je n'en avais besoin qu'une fois, j'utiliserais simplement dir, sinon j'envisagerais de lancer la mienne, probablement comme une application C # car c'est ce que je connais le mieux (bien que VBScript ou PowerShell soit également viable).

(Au fait - ce n'est pas DOS si vous utilisez cmd.exe)

0
Maximus Minimus

Je pense que vous pouvez utiliser attrib pour obtenir le nombre de fichiers:

attrib.exe /s /D *.*|find /c /v "" >> filecount.txt

Cela créera un fichier appelé filecount.txt dans le répertoire actuel avec le nombre de fichiers et de dossiers dans le répertoire actuel (y compris le fichier nouvellement créé). Vous pouvez changer le

*.*

à

<full_path>\*.*

afin d'obtenir le nombre de fichiers d'un répertoire particulier. Supprimez l'option "/ D" si vous ne voulez pas compter les dossiers. L'option "/ s" traite les fichiers dans tous les répertoires du chemin spécifié. Supprimez-le donc si vous voulez uniquement des fichiers dans le chemin spécifié et que vous ne voulez pas inclure de fichiers dans des sous-dossiers.

Ainsi, par exemple, si vous souhaitez savoir combien de fichiers se trouvent dans votre lecteur C:\et non dans un sous-dossier, vous utiliserez la commande:

attrib.exe C:\*.* | find /c /v "" >> filecount.txt
0
smoak