J'essayais de lister les fichiers dans un répertoire, mais j'obtiens des résultats étranges.
C'est la commande que je tape dans l'invite de commande: dir *t.*
C'est le résultat:
c:\test\1.1.1990.txt
c:\test\1.31.1990.txt
c:\test\1.txttxt
c:\test\11.11.2007.txtGif
c:\test\12.1.1990.txt
c:\test\12.31.1990.txt
c:\test\2.tGift
c:\test\2.txtGif
c:\test\5bbb.exeTxt
c:\test\test.txt
La 9ème sortie est particulièrement étrange: 5bbb.exeTxt
pourquoi avoir ce résultat compte tenu de ma requête? (maintenant que je regarde cela, la plupart des résultats semblent bizarres?) Par exemple, pourquoi 2e?
Quelqu'un peut-il s'il vous plaît expliquer?
J'aurai besoin d'utiliser la méthode GetFiles , qui fonctionne de la même manière, c'est pourquoi je suis intéressé.
Connexes: liste les fichiers du dossier correspondant au motif (débordement de pile)
windows
command-line
Communauté
la source
la source
dir *.t*
(l'exception étant l'avant-dernier élément, que vous avez également noté comme étrange).dir /x
ne montrent rien qui puisse l'expliquer. Quelle version de Windows utilisez-vous? PowerShell pourrait être un meilleur outil pour tout ce que vous essayez de faire ici. (J'ai testé la même commande dans PowerShell - oùdir
est un aliasGet-ChildItem
, et les résultats étaientCMD
soit très imparfaite. S'il existe une relation entre C # et une interface de ligne de commande Windows commune, ce serait avec PowerShell, mais cela ne va toujours pas dans le bon sens.Réponses:
Je soupçonne que c'est à cause du comportement mentionné dans le blog de Raymond Chen (avertissement - pas de documentation).
Votre schéma est
*t.*
, ce qui devient, je suppose*t
, qui correspond5bbb.exeTxt
. Je ne sais pas comment çaDirectoryInfo.GetFiles
marche, pourquoi ne pas simplement le tester?On dirait que peut-être les noms courts sont également appariés, ou les trois premiers caractères de l'extension.
la source
dir *t /x
et il expliquera votre dernier problème de sortie.Je pense que @dsolimano (et sa source, Raymond Chen) se sont rapprochés de votre problème mais n’ont peut-être pas la bonne explication. Après quelques réflexions, recherches et tests, bien que je n’aie pas encore fourni de documentation à ce sujet, je suis parvenu à une conclusion assez précise.
Mon hypothèse est basée sur un comportement quelque peu lié aux noms de domaine et à certaines autres ressources informatiques nommées. Avec les noms de domaine, il y a en fait un point de fin implicite à la fin.
www.superuser.com
Est donc réellementwww.superuser.com.
. Ma conclusion, après quelques tests, est que l'API Windows (si ce n'est le système de fichiers lui-même) utilise la même convention pour les noms de fichiers.Pensez à tous les noms de fichiers que vous avez donnés et qui correspondent à votre résultat. Si vous considérez que les noms de fichier 8.3 sont inclus dans les recherches, comme décrit ici , et supposez que les noms de fichier longs avec un point final et les noms de fichier 8.3 avec un point final sont également inclus, vous constaterez que chacun de ces fichiers correspond à au moins un. version de son nom de fichier. (N'oubliez pas que le
*
caractère générique est un espace réservé qui représente "un nombre quelconque de caractères, ou aucun caractère".)c:\test\1.1.1990.txt
correspond à1.1.1990.txt.
ou111990~1.TXT.
c:\test\1.31.1990.txt
correspond à1.31.1990.txt.
ou131199~1.TXT.
c:\test\1.txttxt
correspond à1.txttxt.
ou1956B~1.TXT.
c:\test\11.11.2007.txtGif
correspond à111120~1.TXT.
c:\test\12.1.1990.txt
correspond à12.1.1990.txt.
ou12199~1.TXT.
c:\test\12.31.1990.txt
correspond à12.31.1990.txt
ou123119~1.TXT.
c:\test\2.tGift
correspond à2.tGift.
c:\test\2.txtGif
correspond à2BEFD~1.TXT.
c:\test\5bbb.exeTxt
correspond à5bbb.exeTxt.
c:\test\test.txt
correspond àtest.txt
outest.txt.
Vous pouvez tester cela en créant une série de fichiers de test
C:\test
comme décrit ci-dessous et en l'exécutantdir *t.*
à nouveau.Vous devriez voir, comme je l'ai fait, que
dir *t.*
seuls les fichiers appartenant aux catégories 1-5 ci-dessus seront renvoyés. Les fichiers de la catégorie 6 seront exclus. Vous pouvez également utiliser laGetFiles
méthode ci-dessous plus directement avec les mêmes fichiers avec PowerShell, à l’aide de la commande ci-dessous, et vous devriez voir les mêmes résultats.la source
Get-ChildItems
commande de PowerShell semble avoir un comportement plus "normal" et prend en charge RegEx. Donc, vous voudrez peut-être voir comment il fait son travail et essayer de travailler à partir de là.