Exclusion de fichiers d'une extension particulière à l'aide de la commande DIR sur la ligne de commande Windows

19

si je veux voir par exemple des fichiers d'une extension particulière en utilisant uniquement la liste dir, je peux le faire en utilisant la commande:

DIR *.txt 

Et il montre tous les fichiers avec .txtextension.
Maintenant, je veux savoir s'il existe une commande avec laquelle je peux exclure certaines extensions?
Par exemple, je ne veux voir aucun fichier avec une extension .exe, comment faire?

Johnydep
la source

Réponses:

26

DIR ne permettra pas ce que vous essayez de faire. Cependant, DIR et FINDSTR peuvent résoudre ce problème.

Par exemple, ce qui suit ignore tous les fichiers .txt de la liste DIR.

dir | findstr /v /i "\.txt$" 
IUnknown
la source
1
vous voudrez peut-être utiliser dir /b | findstr /v /i "\.txt$"car diraffichera l'en-tête et les éventuels fichiers et dossiers incorrects comptent à la fin
phuclv
Pourquoi findstrplus juste find?
Sopalajo de Arrierez
Parce que find recherche du texte et findstr prend en charge les expressions rationnelles, j'ai suggéré Findstr. Si vous voulez simplement rechercher une chaîne exacte, cela fonctionnera aussi très bien.
IUnknown
8
dir /B | find /V ".txt"

Cela listerait tous les fichiers et trouver filtrerait tout ce qui ne contient pas ".txt". C'est loin d'être parfait, mais c'est peut-être suffisant :)

Der Hochstapler
la source
Pas besoin de /B, je dirais, mais je préfère cette réponse tant que je ne vois pas la nécessité de «findstr» (la vraie acceptée).
Sopalajo de Arrierez du
3

Cela dépend de votre interpréteur de commandes.

Microsoft cmdn'a pas une telle installation, comme vous pouvez le voir dans les autres réponses où l'on doit post-traiter la sortie de dir. TCC / LE de JP Software le fait. Cela s'appelle une plage d'exclusion de fichiers et est utilisé comme ceci pour l'exemple dans votre question:

dir /[!*.exe] *

JdeBP
la source
Merci, mais je pense que cet outil fonctionne en tant que programme autonome. Je fais mon application où j'exécute un processus externe en utilisant le shell Windows ou bash dans ubuntu, donc cet outil ne conviendra pas, s'ils fournissent des commutateurs de ligne cmd alors ce sera utile.
Johnydep
1
Ce qui précède est clairement un commutateur de ligne de commande. Lisez la documentation hyperliée. Bien sûr, dans la plupart des langages de programmation, il est assez idiot d'aller à la longueur de l'utilisation du shell pour obtenir le contenu du répertoire , et vous êtes sur le mauvais StackExchange pour écrire des applications.
JdeBP
merci pour l'explication, c'est vrai, mais c'est une solution de contournement pour l'analyse des répertoires qui nécessitent une élévation et je ne veux pas que mon code déclenche l'invite UAC, lorsque je peux obtenir des résultats à partir de l'invite cmd sans nécessiter de privilèges plus élevés.
Johnydep