Wenn ich dir *.*
es starte, entstehen unerwartete Ergebnisse. Sogar Dateien und Ordner ohne Punkt im Namen werden aufgelistet. Zum Beispiel
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
Warum ist das so? Gibt es eine Möglichkeit, nur Dateien mit einem Punkt aufzulisten?
.
ähnliches enthalten,.
für viele Zwecke, einschließlich dieses..
Zeichen nicht enthalten , haben.
am Ende ein implizites Zeichen. - Sie können beispielsweise einen Ordner mit dem Namen "Blah.old" haben, der dann eine herkömmliche Dateierweiterung mit drei Buchstaben hat. Für den täglichen Gebrauch ist "Blah
" jedoch dasselbe wie "Blah.
", egal ob es sich um eine Datei oder einen Ordner handelt..
, und die Bezeichnungen in DNS-Namen werden durch getrennt.
(daher ist der Name der Root-DNS-Zone eine einzelne Bezeichnung mit der Länge Null). Ein Kind der Stamm-DNS-Zone.
istcom.
und ein Kind voncom.
istsuperuser.com.
und so weiter.Antworten:
Ich schreibe diese Antwort, weil OP Folgendes betont hat:
Der
DIR
Befehl stammt aus einer Zeit, in der:Nach diesem Standard
*.*
bedeutete dies daher, egal wie der Name und welche Erweiterung auch immer war . Dabei handelt es sich nicht um eine Zeichenfolge mit einem ".", Die Zeichen vor oder nach dem "." Enthalten kann oder nicht. .Microsoft-Richtlinien gewährleisten die Abwärtskompatibilität. Daher wird diese Auslegung
*.*
beibehalten.In Windows PowerShell
*.*
bedeutet dies jedoch eine Zeichenfolge mit einem ".", Die möglicherweise Zeichen vor oder nach dem "." .quelle
Folder.
" und ein Ordner mit dem Namen "Folder
" für Windows gleich benannt.AA.BB
mit <8 im ersten Teil und <3 in der Erweiterung ausgesehen? Hat es nur mit Leerzeichen aufgefüllt?Warum ist das so?
Man könnte eine Antwort auf " Warum ist das so? " Im Wildcards- Artikel finden:
Implikation . Der letzte {Punkt} in einem Datei- / Ordnernamen trennt den Basisnamen und die Erweiterung. Damit
dir *.
zeigt alle Einzelteile mit keiner Erweiterung unddir *.*
Zeigt alle Elemente mit einer Erweiterung von null oder mehr Zeichen an .Streng genommen
dir *.
werden alle Elemente ohne Punkt (.
) im Namen angezeigt . (Übrigens, Benennen von Dateien, Pfaden und Namespaces MSDN-Artikel besagt ausdrücklich, dass " es akzeptabel ist, einen Punkt als erstes Zeichen eines Namens anzugeben ".)Gibt es eine Möglichkeit, nur Dateien mit einem Punkt aufzulisten?
Ich glaube nicht Es gibt jedoch eine Problemumgehung mit einem passenden regulären Ausdruck.
PowerShell (Komplettlösung bei Verwendung in einer Powershell-Konsole):
Cmd (nur eine Idee, könnte etwas Ausarbeitung erfordern):
Nachtrag: Bonus und Erklärung
Eine intuitive Vermutung,
Name
die verkettet istBaseName
undExtension
nicht gilt . Das folgende Skript beweist die Verwendungcmd
und diePowerShell
Kernfunktionen, und der seltsame^..*\...*$
reguläre Ausdruck wird aus den Ergebnissen abgeleitet.Ausgabe :
Vergleichen Sie die Definition der
BaseName
Eigenschaft, die für Dateien und Ordner unterschiedlich ist:Meine ursprüngliche Antwort basierte auf einem unverzeihlichen Missverständnis:
Lesen Siedir /?
, verwenden Siedir /A:-D
:Ein anderer Ansatz:findstr
Regex anwenden alsdir *.* | findstr /V "<.*>"
quelle
*.*
alle.
wie.dbus-keyrings
,.VirtualBox
und.vscode
.dir /A:-D
listet nur Dateien, die glücklich sind?dir /A:-D
ist falsch. 1 / es listet Dateien ohne Endung auf. 2 / Es werden keine Verzeichnisse.
Sie können Dateinamen mit einem Punkt abgleichen
<
, indem Sie den undokumentierten Platzhalter verwenden , der entweder einer Folge von 0 oder mehr Zeichen im Basisnamen oder einer Folge von 0 oder mehr Zeichen in der Erweiterung entspricht:Denken
<
Sie daran, dass dies auch ein Metazeichen ist. Sie müssen es daher immer dann zitieren oder maskieren, wenn Sie es in einem Muster aus der Befehlsshell verwenden.quelle
Der Befehlszeileninterpreter sieht " . " Als "Alle Basisdateinamen" mit "Alle Erweiterungen". Eine leere Erweiterung ist immer noch eine Erweiterung , daher wird sie mit der Liste abgeglichen und zurückgegeben. Wie andere erklärt haben, ist dies ein Kater aus früheren Versionen von Windows und MS-DOS.
Wenn Sie gerne mit PowerShell suchen, ist das Auffinden dieser Dateien viel einfacher. Beachten Sie, dass "dir" in PowerShell ein Alias für das Cmdlet "Get-ChildItem" ist.
So finden Sie alle Dateien (keine Verzeichnisse / Ordner) mit einer Erweiterung (z. B. "myfile.txt", aber nicht "FileWithNoExt"):
Der Schalter "-af" ist eine Abkürzung für "-File", wodurch die Rückgabeobjekte nur auf Dateien beschränkt werden. "-ad" würde nur Verzeichnisse erhalten. Das "\." bedeutet "ein buchstäbliches Punktzeichen". Ohne den umgekehrten Schrägstrich würde der Punkt mit jedem Zeichen übereinstimmen, wie es der reguläre reguläre Ausdruck vorsieht.
So rufen Sie alle Dateien ab, in denen der Name einen Punkt ohne die Erweiterung sowie eine Erweiterung enthielt (z. B. "myDocument_v1.1.doc", aber nicht "myfile.txt"):
Beachten Sie jedoch, dass dies eine Datei mit dem Namen ".archive" mit einem vorangestellten Punkt ausschließt. Dies liegt daran, dass es so behandelt wird, als hätte es keinen Basisnamen und die Erweiterung "archive". Wenn Sie diese einbeziehen möchten:
Hier lautet das Übereinstimmungsmuster "Ein Literalpunkt, OR (|) BeginningOfString (^) gefolgt von EndOfString ($) (dh eine leere Zeichenfolge)". Da eine Datei nicht gleichzeitig einen leeren Basisnamen und eine leere Erweiterung haben kann, werden die Dateien mit einem Punkt beginnend gefunden.
quelle
ls *.*
genug, wie viele andere vor Ihnen geantwortet habenWenn Sie obigen Befehl eingeben, dann hier: * (dies ist eine Wild Card , das jede Folge von Zeichen bedeutet) gefolgt von einem Punkt , gefolgt von * könnte dies alle Dateien als Show interpretiert werden , die Namen haben wie (.) (Jede Folge von Zeichen ). (eine beliebige Folge von Zeichen), was außerdem bedeutet, dass alle Dateien mit einer beliebigen Erweiterung angezeigt werden.
quelle
Program Files
in der Liste enthalten? Es passt nicht zum Muster<sequence of characters>.<sequence of characters>
.