Kann ich Punktdateien mit der Tab-Vervollständigung von cmd.exe ignorieren?

Kann ich Punktdateien mit der Tab-Vervollständigung von cmd.exe ignorieren?

Ich muss leider von Zeit zu Zeit mit cmd.exe arbeiten und es stört mich normalerweise nicht allzu sehr, außer wenn ich eine Datei in vim bearbeite und dann versuche, diese Datei mit der Tab-Vervollständigung auszuführen.

Wenn ich die Datei foo.pyin vim geöffnet habe, .foo.py.swpist sie auch im Verzeichnis vorhanden. Das Verhalten, das ich sehe, ist:

C:\foo> f[TAB]
C:\foo> .foo.py.swp[TAB]
C:\foo> foo.py

Das ist ziemlich ärgerlich und ich frage mich, ob es eine Möglichkeit gibt, dieses Verhalten zu verhindern, ohne eine vollständige Problemumgehung wie die Änderung der Benennung meiner Auslagerungsdatei oder die Verwendung von PowerShell durchzuführen. Mir ist zwar aufgefallen, dass PowerShell dieses Verhalten nicht emuliert, aber ich möchte es wirklich nicht verwenden.

Antwort1

Windows verhält sich genau so, wie man es erwarten würde, wenn man es durchdenkt (und um ehrlich zu sein, hatte ich es nicht ganz durchdacht, bis ich Ihre Frage sah). Ein Dateiname, der mit einem '.' beginnt, wird als Datei mit einem Nulldateinamen mit einer Erweiterung angesehen. Um zu sehen, wie das funktioniert, erstellen Sie ein Verzeichnis und erstellen Sie dann die folgenden Dateien mit touch(ich gehe davon aus, dass Sie mit vertraut sind touch):

touch .a.aaa
touch a.aaa
touch .b.bbb
touch b.bbb

Verwenden Sie nun in diesem Verzeichnis die tabTaste, um durch die Dateien zu blättern. Sie werden sehen, dass die Reihenfolge folgendermaßen lautet:

.a.aaa
.b.bbb
a.aaa
b.bbb

Wenn Sie die „a“-Dateien durchgehen möchten, geben Sie vor „a“ ein tabund Sie erhalten ein vorhersehbares .a.aaa, a.aaa.

Das _Zeichen in einem Dateinamen ist wie jedes andere Zeichen und wird nach „Z“ sortiert.

Antwort2

Die Semantik von FindFirstFile (was CMD verwendet, um übereinstimmende Dateien aufzuzählen) bedeutet, dass das Muster sowohl anhand des langen Dateinamens (den Sie sehen möchten) als auch anhand des automatisch generierten Dateinamens „8.3“ getestet wird. Die Generierung des Kurznamens ist der Grund für Ihre falschen Übereinstimmungen.

Sie können die 8.3-Generierung über FSUTIL deaktivieren, aber das stoppt die WEITERE Generierung und entfernt bereits vorhandene Namen nicht. Sie müssten ein Skript ausführen, das Umbenennungen vornimmt, um sie vollständig zu entfernen.

Dies ist jedoch gefährlich, da einige Programme keine Ahnung davon haben und die automatisch generierten Kurznamen aufschreiben (sagen wir, Sie verwenden ein 16-Bit-Installationsprogramm, wie alte Versionen von MSOFFICE). Wenn Sie die Generierung deaktivieren, können diese Installationsprogramme fehlschlagen.

verwandte Informationen