Quand je cours, dir *.*
cela produit des résultats inattendus. Même les fichiers et les dossiers sans nom dans leur nom sont répertoriés. Par exemple
C:\>dir *.*
Volume in drive C is System
Volume Serial Number is AC0A-29DA
Directory of C:\
14-03-2017 05:17 PM 8,192 ntuser.dat
03-01-2017 07:10 PM <DIR> Perl520
28-03-2017 10:13 AM <DIR> Program Files
28-03-2017 10:13 AM <DIR> Program Files (x86)
04-01-2017 03:25 PM <JUNCTION> Python27 [C:\Program Files\Anaconda]
06-02-2017 10:16 PM <DIR> SAP
28-03-2017 04:10 PM 152 useragent.log
03-01-2017 03:04 PM <DIR> Users
16-03-2017 04:24 PM <DIR> VM
22-03-2017 11:13 AM <DIR> Windows
2 File(s) 8,344 bytes
8 Dir(s) 270,172,966,912 bytes free
Pourquoi donc? Est-il possible de ne lister que les fichiers avec un point?
.
comme ils le sont.
à la fin pour plusieurs raisons, y compris celle-ci..
caractère ont un.
caractère implicite à la fin. - Vous pouvez par exemple avoir un dossier nommé "Blah.old", qui aura alors une extension de fichier classique de 3 lettres; pour une utilisation quotidienne bien que "Blah
" soit identique à "Blah.
", qu'il s'agisse d'un fichier ou d'un dossier..
, et les étiquettes des noms DNS sont séparées par.
(le nom de la zone DNS racine est donc une étiquette de longueur nulle). Un enfant de la zone DNS racine.
estcom.
et un enfant decom.
estsuperuser.com.
, et ainsi de suite.Réponses:
J'écris cette réponse parce que OP a souligné que:
La
DIR
commande vient d'un moment où:Par conséquent, par cette norme, on
*.*
entend quel que soit le nom et quelle que soit l’extension . Cela ne signifie pas une chaîne contenant un ".", Qui peut ou non avoir des caractères avant ou après le "." .La politique de Microsoft préserve la compatibilité ascendante. Par conséquent, cette interprétation de
*.*
est retenue.Mais dans Windows PowerShell,
*.*
signifie une chaîne contenant un ".", Qui peut ou non comporter des caractères avant ou après le "." .la source
Folder.
" et un dossier nommé "Folder
" portent le même nom en ce qui concerne Windows.AA.BB
avec <8 dans la première partie et <3 dans l'extension? A-t-il simplement rempli d'espaces?Pourquoi donc?
On pourrait trouver une réponse à " Pourquoi est-ce? " Dans l' article Wildcards :
Implication . Le dernier {point} d'un nom de fichier / dossier sépare le nom de base et l'extension. Alors
dir *.
affiche tous les articles sans extension , etdir *.*
affiche tous les éléments avec une extension de zéro ou plusieurs caractères .À proprement parler,
dir *.
affiche tous les éléments sans.
nom ( ) . (Article BTW, noms de fichiers, chemins d'accès et espaces de noms, article MSDN stipulant explicitement qu '" il est acceptable de spécifier un point comme premier caractère d'un nom ".)Est-il possible de ne lister que les fichiers avec un point?
Je ne pense pas. Toutefois, il existe une solution de contournement avec une expression régulière appropriée.
PowerShell (solution complète si utilisée dans une console Powershell):
Cmd (une idée seulement, peut nécessiter quelques précisions):
Addendum: un bonus et une explication
Une hypothèse intuitive qui
Name
est concaténéeBaseName
etExtension
ne tient pas . Le script suivant prouve à l'aidecmd
etPowerShell
fonctionnalités de base, et l' étrange^..*\...*$
regex est dérivé de résultats est tout.Sortie :
Comparez la définition de la
BaseName
propriété, différente pour les fichiers et les dossiers:Ma réponse initiale était basée sur un malentendu impardonnable:
Liredir /?
, utiliserdir /A:-D
:Une autre approche: appliquerfindstr
regex en tant quedir *.* | findstr /V "<.*>"
la source
*.*
correspond à tous les fichiers , comme indiqué dans la question.
semblable.dbus-keyrings
,.VirtualBox
et.vscode
.dir /A:-D
répertorie uniquement les fichiers qui sont heureux?dir /A:-D
est incorrect. 1 / il répertorie les fichiers sans extension. 2 / il ne répertorie pas les répertoires qui ont un.
nom (parfaitement légal)Vous pouvez faire correspondre les noms de fichiers avec un point en utilisant le caractère générique non documenté
<
, qui correspond à une séquence de 0 caractères ou plus dans le nom de base ou à une séquence de 0 caractères ou plus dans l'extension:Rappelez-vous qu’il
<
s’agit également d’un métacaractère, vous devez donc le citer ou l’échapper à chaque utilisation de celui-ci dans un motif à partir du shell de commande.la source
L'interpréteur de ligne de commande verra " . " Comme "Tous les noms de fichiers de base" avec "toutes les extensions". Une extension vide est toujours une extension , elle sera donc mise en correspondance et renvoyée avec la liste. Comme d'autres l'ont expliqué, il s'agit d'une survivance de versions antérieures de Windows et de MS-DOS.
Si vous préférez utiliser PowerShell, il est beaucoup plus facile de rechercher ces fichiers. Notez que dans PowerShell, "dir" est un alias de la cmdlet "Get-ChildItem".
Pour trouver tous les fichiers (pas les répertoires / dossiers) ayant une extension (par exemple, "myfile.txt", mais pas "FileWithNoExt"):
le commutateur "-af" est un raccourci pour "-Fichier" qui limite les objets renvoyés aux fichiers. "-ad" n'obtiendrait que des répertoires. Le "\." signifie "un caractère littéral". Sans la barre oblique inverse, le point correspondrait à n'importe quel caractère, comme dans les expressions rationnelles standard.
Pour obtenir tous les fichiers contenant un point dans le nom sans extension, ainsi qu'une extension (par exemple, "myDocument_v1.1.doc" mais pas "myfile.txt"):
Notez cependant que cela exclura un fichier avec le nom tel que ".archive" avec un point précédent. Ceci est dû au fait qu'il est traité comme n'ayant pas de nom de base et une extension "archive". Si vous souhaitez inclure ces éléments:
Ici, le motif de correspondance indique "Un point littéral, OU (|) BeginningOfString (^) suivi de EndOfString ($) (c'est-à-dire une chaîne vide)". Comme un fichier ne peut avoir à la fois un nom de base et une extension vide , il trouvera les fichiers commençant par un point.
la source
ls *.*
c'est assez, comme beaucoup d'autres ont répondu avant vousSi vous tapez la commande ci-dessus, alors voici: * (il s'agit d'un caractère générique qui signifie toute séquence de caractères) suivi d'un point (.) Suivi de * cela pourrait être interprété comme indiquant tous les fichiers portant le même nom (toute séquence de caractères (toute séquence de caractères), ce qui signifie en outre que tous les fichiers, quelle que soit leur extension, sont affichés.
la source
Program Files
inclus dans la liste? Cela ne correspond pas au motif<sequence of characters>.<sequence of characters>
.