Windows-Einzelzeichen-Platzhalter gibt mehr als erwartet zurück

1576
E Brown

Ich versuche, eine Verzeichnisliste von Dateien mit Dateinamen zu erstellen, die aus 8 Zeichen bestehen, gefolgt von einem Punkt und einer Dateierweiterung in der Windows-Befehlsshell. Das Wildcard-Muster, das ich verwende, lautet "????????. TIF". Dies gibt ALLE Dateinamen mit der Erweiterung ".TIF" zurück, unabhängig von der Länge des Vorerweiterungsteils des Dateinamens. Beispiel:

dir A * .TIF

Gibt ABCDEFGH.TIF und ABCDEFGHIJ.TIF zurück

dir ????????. TIF

Gibt auch beide Dateien zurück. Ich würde erwarten, dass nur das erste zurückgegeben wird, da es das einzige der beiden ist, das mit dem Muster übereinstimmt (8 einzelne Zeichen, gefolgt von ".TIF".) Wie wird dieses Verhalten erklärt?

Vielen Dank im Voraus für alle Antworten.

3

3 Antworten auf die Frage

7
Dave Webb

Ich denke, das Problem ist, dass ABCDEFGHIJ.TIFes einen kurzen Namen hat, der so ähnlich ist ABCDEF~1.TIFund der Ihrem Muster entspricht.

Wenn Sie verwenden DIR /X, sehen Sie die kurzen Namen - dh. der 8.3-Dateiname - aller Ihrer Dateien.

Sie könnten so etwas versuchen:

DIR /B | FINDSTR /R /I "^........\.TIF" 

Dies verwendet FINDSTR im regulären Ausdruck, um sicherzustellen, dass genau 8 Zeichen vor dem Ausdruck stehen .TIF. Für weitere Hilfe zu FINDSTR geben Sie die FINDSTR /?Befehlszeile ein.

Danke für die Antwort. Bei Verwendung von "DIR / X" wird in der Ausgabe zusätzlich zu dem längeren Namen ein kurzer Dateiname angezeigt. Gibt es eine Möglichkeit, die kurzen Dateinamen mit dem Befehl DIR herauszufiltern? In den Optionen mit "DIR /?" Sehe ich nichts Vielversprechendes. E Brown vor 13 Jahren 0
Ich kenne keinen Weg, um zu erzwingen, dass "DIR" nur mit langen Namen übereinstimmt. Aus diesem Grund schlug ich vor, "FINDSTR" zu verwenden, um stattdessen die Ausgabe von "DIR" zu filtern. Dave Webb vor 13 Jahren 0
Vielen Dank. Ich wollte GNU Unix Utils installieren und eine ähnliche Filterung mit "grep" durchführen. War mir des Befehls "findstr" nicht bewusst, aber Ihre Methode funktionierte gut für das, was ich getan hatte. E Brown vor 13 Jahren 0
2
Brain2000

Wenn Sie dies korrigieren möchten, öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten und geben Sie Folgendes ein:

fsutil 8dot3name set 1 

Bei vorhandenen Dateien tritt das Problem weiterhin auf, bis Sie den kurzen Dateinamen entfernt haben. Neue Dateien, die Sie kopieren / erstellen, haben das Problem nicht. Wenn Sie kurze Dateinamen massenweise abisolieren müssen, können Sie Folgendes verwenden:

fsutil 8dot3name strip /s <directory> 

Das Problem scheint auf Windows 7 zurückzuführen zu sein, wobei anstelle des langen Dateinamens der kurze Dateiname für Platzhalter verwendet wird.

0
Sathya

?bedeutet, dass jedes einzelne Zeichen übereinstimmt . Mit a dir ????????.TIFsagen Sie, dass Sie alle Dateien zurückgeben, die 8 Zeichen und eine .tifErweiterung haben, während dir A*.tifMittel alle Dateien zurückgeben, die mit A"a" beginnen und die .tifErweiterung haben

Danke für die Antwort. Ich weiß das - ich habe das "dir A * .TIF" beigefügt, um die beiden Dateien zur Veranschaulichung anzuzeigen. Ich muss nur Dateien mit 8 Zeichen und der Erweiterung .tif auflisten. Das ????????. TIF-Muster gibt sowohl den 8-stelligen als auch den a-TIF-Dateinamen und den 10-stelligen und den a-TIF-Dateinamen zurück. Ich würde erwarten, dass es nur das vorherige zurückgibt, da das Muster 8 einzelne Zeichen und eine Erweiterung .tif angibt. E Brown vor 13 Jahren 0