Kann ich Punktdateien mit dem Abschluss der cmd.exe-Registerkarte ignorieren?

690
djs

Ich muss leider gelegentlich mit cmd.exe arbeiten, und es stört mich normalerweise nicht zu sehr, es sei denn, ich bearbeite eine Datei in vim und versuche dann, diese Datei mit tab-completion auszuführen.

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

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

Dies ist ziemlich ärgerlich und ich frage mich, ob es eine Möglichkeit gibt, dieses Verhalten zu verhindern, als wäre es eine vollständige Problemumgehung, wie das Ändern der Namen der Auslagerungsdatei oder die Verwendung von PowerShell. Ich habe bemerkt, dass PowerShell dieses Verhalten nicht nachahmt, aber ich möchte es wirklich nicht verwenden.

3
Warum sind Sie so dagegen, PowerShell zu verwenden? Sasha Chedygov vor 13 Jahren 0
Ich fand es weniger nützlich als hilfreich. Es ist gegen-intuitiv zu cmd.exe und bash. djs vor 13 Jahren 0
Es gibt jetzt eine hervorragende Lösung für dieses Problem: [clink] (https://code.google.com/p/clink/) bietet Bash-Readline-Funktionen in einem systemeigenen cmd.exe-Fenster. djs vor 11 Jahren 1

2 Antworten auf die Frage

3
BillP3rd

Windows verhält sich genau so, wie Sie es erwarten würden, wenn Sie es durchdenken (und um ehrlich zu sein, bis ich Ihre Frage nicht gesehen hatte, hatte ich es nicht vollständig durchdacht). Ein Dateiname, der mit einem '.' Beginnt wird als eine Datei mit einem Null-Dateinamen mit einer Erweiterung angezeigt. Um zu sehen, wie das funktioniert, erstellen Sie ein Verzeichnis und erstellen Sie dann die folgenden Dateien mit touch(Ich nehme an, Sie kennen sich damit aus touch):

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

Verwenden Sie nun in diesem Verzeichnis den tabSchlüssel, um durch die Dateien zu navigieren, und Sie werden feststellen, dass die Reihenfolge wie folgt lautet:

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

Wenn Sie die durch ‚a‘ Dateien gehen wollen, dann geben Sie ‚a‘, bevor das tabund Sie werden eine vorhersagbare erhalten .a.aaa, a.aaa.

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

1
MJZ

Die Semantik von FindFirstFile (was CMD verwendet, um übereinstimmende Dateien aufzulisten) bedeutet, dass das Muster sowohl anhand des langen Dateinamens (was Sie sehen möchten) als auch anhand des automatisch generierten Dateinamens "8.3" getestet wird. Die Kurznamengenerierung ist das, was Ihre falschen Übereinstimmungen verursacht.

Sie können die 8.3-Generierung über FSUTIL deaktivieren, dies stoppt jedoch die FURTHER-Generierung und entfernt bereits vorhandene Namen nicht. Sie müssen ein Skript ausführen, das Umbenennungen ausführt, um sie vollständig zu entfernen.

Dies ist jedoch gefährlich, da einige Programme ahnungslos sind und die automatisch generierten Kurznamen aufschreiben (sagen Sie, dass Sie ein 16-Bit-Installationsprogramm verwenden, wie alte Versionen von MSOFFICE). Wenn Sie deren Generierung deaktivieren, schlagen diese Installationsprogramme möglicherweise fehl.