Warum kann in Windows 7 kein Ordner mit dem Namen "._." Benannt werden?

74

Mir ist gerade aufgefallen, dass es nicht möglich ist, einen Ordner zu benennen ._.- er wird ._stattdessen benannt. Manchmal verschwindet es direkt nach dem Benennen, wird aber nach dem Aktualisieren der Ansicht wieder angezeigt. Windows scheint ein Problem mit Punkten am Ende eines Dateinamens zu haben - warum ist das so?

Schwarz
quelle
21
Bemerkenswert ist, dass Sie über den "Hack" zum Starten eines Dateinamens mit einem .in Windows gestolpert sind .
Jpmc26
8
@ThisNameBetterBeAvailable Ungetestet, funktioniert aber cd -- -_-möglicherweise. Dies --ist eine häufige Markierung für das Ende von Optionen.
TripeHound
13
@ThisNameBetterBeAvailable Nein, --allein bedeutet " Dies ist das Ende der Optionen. Behandle alles, was mit- " beginnt, als wörtlichen Wert. " Gerade getestet: mkdir -- -_-und cd -- -_-funktioniert wie erwartet.
TripeHound
2
Alternativ ./-_-sollte das auch funktionieren.
glglgl
5
@Alexander Unter Linux cd "-_-"verwendet die Shell die Anführungszeichen für die Gruppierung, behandelt sie jedoch nicht als Teil des Arguments. es Fehler mitinvalid option
Izkata

Antworten:

123

Windows erfordert normalerweise, dass Dateien keine Erweiterung oder eine Erweiterung haben, die mindestens ein Zeichen lang ist. Es ist nicht cool mit Erweiterungen der Länge Null, dh Dateinamen, die mit enden .. Ordner können auch Erweiterungen haben. Daher lassen Windows ihre Namen nicht mit einem enden .. Quelle aus dem Artikel, den DavidPostill verlinkt hat :

Verwenden Sie einen Punkt, um den Basisdateinamen von der Erweiterung im Namen eines Verzeichnisses oder einer Datei zu trennen .

(Hervorheben von mir.) Wenn Sie versuchen, eine Datei oder ein Verzeichnis mit einem Punkt zu beenden, geht Windows einfach davon aus, dass Sie keine Erweiterung möchten, und entfernt sie daher, auch wenn Sie sie mit mdeiner Eingabeaufforderung erstellen .

Gefahrenzone! Wenn Sie möchten, dass ein Ordnername endet ., müssen Sie die Magic Raw-Reihenfolge zum Überschreiben von verwenden \\?\. In einer Eingabeaufforderung md \\?\C:\path\to\container\._.wird zwar ein Ordner mit dem Namen erstellt ._., aber viele Programme werden Probleme damit haben, auch der Explorer:

._.  Probleme

Ein solches Verzeichnis kann nur mit dem rdfolgenden \\?\Namen entfernt oder mit dem kurzen Namen (8.3, dir /x) umbenannt werden.

Ben N
quelle
1
Vielen Dank für Ihre ausführliche Antwort! :) Ich denke, dies wäre ein perfekter Ordner, um geheime Dinge wie Passwörter darin zu verbergen, da Sie den Ordner nur öffnen können, wenn Sie ihn zuerst umbenennen, und nicht jeder weiß, wie man ihn umbenennt.
Schwarz
19
@EdwardBlack es würde niemanden aufhalten, der Stapelaustausch lesen könnte (und würde daher nicht einmal Sicherheit gegen den hypothetischen kleinen Bruder bieten). Der von gegebene Name dir /xmacht es ziemlich einfach, und es gibt andere Male, in denen dieser Name praktisch ist.
Chris H
11
FWIW, die Befehlszeilentools von Cygwin, können solche Verzeichnisse auch unter Windows 7 erstellen (und bearbeiten), ohne eine magische Sequenz zu verwenden.
Steve Jessop
4
@EdwardBlack Wie Chris H bereits erwähnt hat, ist es nicht sehr geheim, weshalb Sie in einem solchen Ordner nichts besonders Wichtiges aufbewahren sollten. Darüber hinaus ist die Geheimhaltung und der Schutz digitaler Daten ein vielfach gelöstes Problem. Sie können eine beliebige Anzahl von Verschlüsselungsmethoden und -programmen verwenden, um die Sicherheit zu gewährleisten, ohne sich auf unbekannte Ordnernamen verlassen zu müssen.
Kris Harper
3
Nitpick: Zumindest in den 8,3 Tagen (ich habe nicht untersucht, was unter NTFS auf die Festplatte geschrieben wurde) wurde der Zeitraum überhaupt nicht auf die Festplatte geschrieben. Der Name wurde in name & extension aufgeteilt, sie wurden separat gespeichert. Beim Lesen nahm es den Namen und wenn es eine Erweiterung gab, fügte der Punkt und die Erweiterung dem Namen hinzu. Es gab also keine Möglichkeit, ._ auszudrücken. in der verzeichnisstruktur haben sie natürlich den abschließenden punkt verloren.
Loren Pechtel
22

Windows scheint ein Problem mit Punkten am Ende eines Dateinamens zu haben? Warum ist das?

Beenden Sie einen Datei- oder Verzeichnisnamen nicht mit einem Leerzeichen oder einem Punkt. Das zugrunde liegende Dateisystem unterstützt möglicherweise solche Namen, die Windows-Shell und die Benutzeroberfläche jedoch nicht.

Der unten stehende Quelllink enthält nähere Informationen zu den Regeln für die Benennung.

Quellennamensdateien , Pfade und Namespaces

DavidPostill
quelle
5
Das klingt für mich immer noch nach einem Fehler.
Ralu
@ralu Wenn es sich um einen Fehler handelt, scheint es MS völlig uninteressant zu sein, ihn zu beheben. Diese Einschränkungen gibt es seit Windows XP (wenn nicht schon früher).
DavidPostill
Windows XP? Ich vermute, dass diese Einschränkungen ihre Wurzeln in MS-DOS 0.x haben - lassen Sie uns Herrn Gates bitten, das Problem zu klären ...
Christian Severin
17

Es ist kein Fehler. Es ist beabsichtigt, Kompatibilitätsprobleme zu vermeiden.
Es ist ein Überbleibsel aus der alten DOS-Zeit.

In den Dateisystemen FAT12 (Diskette) und FAT16 (FAT16 vor der in Windows 95 eingeführten Unterstützung langer Dateinamen) wurden Dateinamen nur in 11 Bytes gespeichert:
8 Bytes für den Namen, 3 für die Erweiterung. Der "Punkt" zwischen Name und Endung wurde nicht einmal gespeichert. Es wurde impliziert und automatisch zu Anzeigezwecken hinzugefügt.
Verzeichnisse hatten überhaupt keine Erweiterungen. Stattdessen wurden die 3 Bytes für die Erweiterung mit "$" Zeichen gefüllt (die in echten Namen unzulässig waren).
Da Windows immer noch mit diesem Explorer kompatibel ist und viele andere Windows-Komponenten stillschweigend ausgeführt werden, wird die Wartezeit ausgeblendet, um Kompatibilitätsprobleme zu vermeiden.
Wie andere angegeben haben, können Sie solche Ordner mithilfe der RAW-Semantik (\\? \ Präfix vor dem absoluten Pfadnamen) bearbeiten.
Hinter den Kulissen haben NTFS und Netzwerk-Dateisysteme keine Probleme mit solchen Dateien und Ordnern. Der Explorer versucht lediglich zu verhindern, dass der Benutzer etwas erstellt, das Probleme für andere Software verursachen kann.

(Tatsächlich gibt es auch einige andere
Reste : Dateinamen wie COM, COM1, COM2, AUX, PRN, LPT, LPT1, LPT2, LPT3, CON können ähnliche Probleme verursachen, bei denen der Explorer und viele andere Windows-Teile verwirrt werden weil diese Namen "reservierte" Namen sind, die ebenfalls aus der DOS-Zeit stammen.)

Tonny
quelle
3
Allen anderen Lesern, die anfangs ungläubig waren, dass der Punkt nicht gespeichert wurde: Dies gilt für CP / M und alle Versionen von FAT, einschließlich FAT16 und FAT32 .
Ben N
1
Ich erinnere mich an ein altes DOS-Programm (das unter DOS ausgeführt wird und wahrscheinlich INT13-Funktionen direkt verwendet), das mir einmal großen Kummer bereitete, als es irgendwie gelang, eine Datei mit dem Namen a: foo.bar auf dem Laufwerk c: zu erstellen ...
rackandboneman
2
@BenN: eigentlich ist es bei FAT32 ein bisschen anders; Es speichert sowohl einen kurzen Dateinamen (8 + 3 Bytes mit abwärtskompatiblen Namen mit "implizitem Punkt") als auch einen langen Dateinamen (oft als LFN bezeichnet), der aus bis zu 255 UCS-2-Zeichen mit explizitem Punkt besteht Wenn Sie mit 16-Bit-Anwendungen arbeiten, arbeiten Sie immer mit dem LFN.
Matteo Italia
1
@ MatteoItalia Ich verstehe, dass die langen Dateinamen in falschen Dateieinträgen aufbewahrt werden. Bekannte Windows-Installationen suchen nach diesen Einträgen und rendern sie nach Möglichkeit anstelle der SFN. Siehe Raymond Chens Beitrag zu diesem Thema oder den VFAT-Teil der FAT32-Formatspezifikation, die ich oben verlinkt habe.
Ben N
1
-1 Sie irren sich über die Verzeichniserweiterungen; Vielleicht stimmte es für CP / M (mein Speicher ist beschissen über dieses Betriebssystem), aber ich verwende seit DOS-Zeiten das Verzeichnis "programm.ing" in meinem Baum und sehe win.tue.nl/~aeb/linux/ fs / fat / fat-1.html - Verzeichniseinträge werden genau wie Dateien behandelt, sie können auch 8.3-Namen haben. Test: Erstellen Sie ein 8.3-Verzeichnis ( mkdir testfile.name) und zeigen Sie dessen DOS-Namen in Windows ( dir /x) an - Sie erhalten TESTFI~1.NAMwie erwartet.
Vaxquis
3

Das Problem hierbei ist, dass Windows (DOS) 8.3-Dateinamen auf FAT-Dateisystemen zulässt. Bedeutung, 8 Zeichen, gefolgt von a. gefolgt von drei Zeichen. Unter Unix und Linux sind alle Zeichen außer / und \ 0 zulässig. \ 0 ist das C-Zeichenfolge-Abschlusszeichen und / das Verzeichnis-Trennzeichen. Alles andere kann benutzt werden.

Windows 95 hat dieses Problem umgangen, indem eine Datenbank mit kurzen (8.3) Dateinamen und langen Dateinamen (LFN) als Metadaten verwaltet wurde. Wenn Sie Ihre Windows 95-Betriebssystemdateien gelöscht haben, verbleiben bei der nächsten Windows 95-Installation Dateien mit ungewöhnlichen Namen auf der Festplatte. Beispielsweise könnte "Eigene Dateien" auf der Festplatte den Namen MYDOCU ~ 1 haben. Wenn Sie die Metadaten verloren haben, können Sie diese natürlich nicht einfach konvertieren.

Die Shell hat mit vielen historischen Inkrementen zu kämpfen, die seit den MS-DOS-Tagen herumhängen.

Hoffe das hilft

Ed Neville
quelle
1
Es gab nicht wirklich eine Datenbank an sich; Windows hat nur die Teile des langen Dateinamens als Faux-Files auf die Festplatte gestaut. Siehe Raymond Chens Beitrag zu diesem Thema .
Ben N