Sonderzeichen

OP #7789697
Lesenswert?

Erzwingen von Zeichen in Dateinamen

Hallo Leute

Es weiß sicherlich jeder oder fast Jeder das die Zeichen / \ : * ? " < > | in Dateinnamen nicht erlaubt sind.

z.B: Was? Warum auch immer! - Das ? wäre nicht erlaubt.

Warum auch immer. Wobei ein ! wiedrum erlaubt ist/sind.

Gibt es eine Möglichkeit Windows dazu bringen das er die Zeichen akzeptiert.

Könnte mir vorstellen dab man mit RegEdit man irgendwo herumschrauben muss oder so.

Wies ob das so wichtig ist ich benutze jetzt aktuell

Edition Windows 10 Pro Version 22H2 Installiert am ‎30.‎05.‎2024 Betriebssystembuild 19045.5198 Leistung Windows Feature Experience Pack 1000.19060.1000.0

Danke an alle im voraus

#7789716
Lesenswert?

Michelle P. schrieb:

Warum auch immer.

Ja, warum wohl ?

Nennst du deine Datei test*.tx? und willst sie löschen

del test*.tx?

dann löscht das System auch test21.txt und testall.tx einfach so gleich mit.

NATÜRLICH sind also die Wildcards und die Redirection-Zeichen und die Pfadtrenner nicht erlaubt als Dateinamenbuchstaben.

Wer nur Klicki-Bunti kennt, kennt natürlich keine Wildcards. Die Dateisuche unter Windows funktioniert ja schon lange nicht mehr.

#7789742
Lesenswert?

Michael B. schrieb:

NATÜRLICH sind also die Wildcards und die Redirection-Zeichen und die Pfadtrenner nicht erlaubt als Dateinamenbuchstaben.

Naja, die Shell und das Dateisystem sind aber zwei verschiedene Sachen. Das Dateisystem sollte eigentlich von der Shell keine Einschränkungen auferlegt bekommen, aber so hat wurde das damals unter DOS halt gemacht, und das hat sich bis heute so gehalten.

Moderator Persönliche Seite #7789756
Lesenswert?

René H. schrieb:

Aber unter allen Systemen.

Nö. Unter Unixen sind nur / und \0 „ganz tief unten“ nicht erlaubt.

1
$ echo blabla > 'Was zum Geier™ soll der ganze Schei*** hier eigentlich?!¬1^???'
2
$ ls -l Was*
3
-rw-r--r--  1 j  wheel  7 Dec  9 22:36 Was zum Geier™ soll der ganze Schei*** hier eigentlich?!¬1^???
4
$ rm Was*

Geht doch :-)

(Firma: egal) #7789774
Lesenswert?

Michael B. schrieb:

Wer nur Klicki-Bunti kennt, kennt natürlich keine Wildcards. Die Dateisuche unter Windows funktioniert ja schon lange nicht mehr.

Doch, ist jetzt halt eher eine Filterfunktion im Dateiexplorer (nicht mehr gerade das was ich unter Suche verstehe, aber es geht zur not). Aber auch dort geht z.B. immer noch "*.mp?" als Filter. Da hat sich seit dem letzten Jahrtausend nichts dran geändert:-)

Und man wird es kaum glauben, das hat mit Windows noch nicht mal was zu tun. Das gibt es fast überall:

Moderator Persönliche Seite #7789787
Lesenswert?

Lu schrieb:

Geht, genau so lange, bis es beim Restore zufällig irgendetwas fehlt.

Warum sollte beim Restore etwas fehlen? Wenn, dann wäre die Backup-Software schuld, nicht der Nutzer.

Ich würde derartige Dateinamen nicht freiwillig benutzen, aber ich wüsste keinen Grund, warum mein Backup-System damit nicht klar kommen sollte.

Das rundherum wohl schwierigste Feature (manche würden es auch Misfeature nennen) an der Stelle sind Dateinamen, die Newlines enthalten. Geht auch, aber da würde ich tatsächlich nicht meine Perücke drauf verwetten, dass das Backup-Programm damit klar kommt.

#7789839
Lesenswert?

René H. schrieb:

Aber unter allen Systemen.

Nö.

In Android sind sie auch nicht erlaubt.

Windows und Android sind aber noch lange nicht "alle Systeme".

Unter Unixen sind nur / und \0 „ganz tief unten“ nicht erlaubt.

Dann wundert euch aber nicht, wenn euch Nicht-Unix-Nutzer anmeckern. ;)

Dass es erlaubt ist, heißt ja nicht, dass man es nutzen muss. Es geht wie schon gesagt eher darum, dass die Shell dem Dateisystem keine Beschränkungen auferlegen sollte.

(Firma: Privat) #7789840
Lesenswert?

Harry L. schrieb:

Zumindest für Leerzeichen, '.', ':' etc: Bei Leuten, die DVD-/BlueRay-Rips sammeln sind solche Dateinamen eher die Regel als die Ausnahme ;-)

In Musik-Sammlungen ist das ebenso gängige Praxis.

Zumindest das Leerzeichen kann man doch leicht mit dem ALT + 255 auf Zehnertastatur gut ersetzen. War schon damals gängige Praxis, um in DOS Dateien (etwas) zu verstecken. Klar, der Fachmann hatte das damals beim DIR sofort gemerkt, da ja der Platz der Datei als leer angezeigt wurde und die folgenden Dateien ja nicht an die Stelle nachgerückt sind.

#7789884
Lesenswert?

Jörg W. schrieb:

Geht, genau so lange, bis es beim Restore zufällig irgendetwas fehlt.

Warum sollte beim Restore etwas fehlen? Wenn, dann wäre die Backup-Software schuld, "nicht der Nutzer".

Wer steht dann mit leeren Händen da? Der UNwissende Nutzer. Wenn unwiederbringliche Hochzeitsbilder und Dokumente verschwunden sind, wegen Sonderzeichen wirst Du viel Freude haben.

Moderator Persönliche Seite #7789938
Lesenswert?

Lu schrieb:

Der UNwissende Nutzer.

Der unwissende Nutzer hat eh keine Backups. Dass man sowas braucht, merkt er erst, wenn die Daten weg sind.

Ich bin bei der Vergabe von Dateinamen auch eher konservativ, das Thema war ja nur, dass es nicht „bei allen Systemen“ so ist, dass Dateisystem oder Betriebssystemfunktionen selbst dem Nutzer solche Einschränkungen auferlegen. Damit hat der Nutzer selbst die Freiheit zu entscheiden, was er gut findet und was nicht.

#7790131
Lesenswert?

Harry L. schrieb:

Jörg W. schrieb:

Ich würde derartige Dateinamen nicht freiwillig benutzen

Zumindest für Leerzeichen, '.', ':' etc: Bei Leuten, die DVD-/BlueRay-Rips sammeln sind solche Dateinamen eher die Regel als die Ausnahme ;-)

In Musik-Sammlungen ist das ebenso gängige Praxis.

Diesbezüglich habe ich gute Erfahrungen mit detox [1] gemacht. HTH, YMMV.

[1] https://sourceforge.net/projects/detox/

#7790205
Lesenswert?

windows erkennt oder markiert mit manchen der zeichen ordner-datei-anfang-ende auf der festplatte. die dateien liegen als lange null-und-eins-reihen auf der festplatte, eigentlich alles sieht so aus. hier habe ich etwas gefunden, man muß schon sehr suchen : https://learn.microsoft.com/de-de/dotnet/standard/io/file-path-formats

es ist wie bei manchen programmiersprachen, oder auch den "regular expressions", manche zeichen sind fix mit einer aufgabe, funktion verknüpft, wie ein schalter. wenn man die zeichen dort trotzdem benutzen will, muß man sie "escapen".

#7790252
Lesenswert?

Carypt C. schrieb:

windows erkennt oder markiert mit manchen der zeichen ordner-datei-anfang-ende auf der festplatte.

Blödsinn.

Zu FAT-Zeiten wurden freie und gelöschte Directory-Einträge am ersten Byte des Dateinamens erkannt, die übrigen Metadaten waren aber davon getrennt.

Carypt C. schrieb:

die dateien liegen als lange null-und-eins-reihen auf der festplatte, eigentlich alles sieht so aus.

"Computer für Grundschüler, Band 1"?

Bist Du eigentlich mit "Schlaumaier" verwandt?

#7790261
Lesenswert?

Jens G. schrieb:

Sherlock 🕵🏽‍♂️ schrieb:

Solange man keine Shell-Scripte darauf los lässt: kein Problem.

Da haben wir wieder die gewissen Einschränkungen ...

Natürlich kommen auch Shell Skripte damit klar, wenn sie richtig geschrieben wurden. Heisst, Sonderzeichen müssen Escaped werden. Man kann die in "" oder in '' packen, oder auch mit \ Escapen. Auch Kombinationen davon gehen. Normalerweise nutzt man '' und , bei "" kann man mit $ noch Variablen rein setzen.

(Firma: 1984now) #7790325
Lesenswert?

Sherlock 🕵🏽‍♂️ schrieb:

Unter Linux kann man "einfach so" fast alle Sonderzeichen benutzen, Emoticons sowieso.

Solange man keine Shell-Scripte darauf los lässt: kein Problem.

Nunja, bei Windows wird eben versucht, diese potentiellen Probleme durch Kollisionen mit der in der Text-Shell reservierten Zeichen proaktiv zu verhindern. Kommt mir irgendwie als durchaus sinnvolle Strategie vor.

Ich würde da eindeutig ein 1+ für das Windows-Konzept verteilen, wenn es mein Job wäre, die Konzepte zu vergleichen.

Übrigens: auf "unterster" Ebene (also im ntoskrnl) hat Windows exakt dieselben Einschränkungen für Dateinamen wie Linux. Es sind genau nur zwei Zeichen nicht erlaubt: Der Pfad-Delimeter und das Null-Zeichen.

Ersteres aus rein logischen Gründen, letzteres haben wir (bei Windows genauso wie bei Linux) den Einschränkungen der verwendeten Programmiersprache zu verdanken, also C.

Weil die halt eigentlich gar keine Strings kennt und als einzigen Notbehelf Null-Zeichen-terminierte Char-Arrays zu Verfügung stellt.

Moderator Persönliche Seite #7790451
Lesenswert?

Ob S. schrieb:

Übrigens: auf "unterster" Ebene (also im ntoskrnl) hat Windows exakt dieselben Einschränkungen für Dateinamen wie Linux.

Womit belegst du diese deine Behauptung?

Die unterste Ebene sind die Systemaufrufe (also nicht etwa ein physisches Schreiben auf das Medium selbst). Dort werden exakt die Zeichen als reserviert dargestellt, die im (möglicherweise Troll-)Eingangsposting genannt sind.

https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file

1
The following reserved characters:
2

3
    < (less than)
4
    > (greater than)
5
    : (colon)
6
    " (double quote)
7
    / (forward slash)
8
    \ (backslash)
9
    | (vertical bar or pipe)
10
    ? (question mark)
11
    * (asterisk)

Also alle diese darfst du eben selbst auf der Ebene eines CreateFile2()-Syscalls nicht benutzen. (Außerdem reservieren sie bis auf Ausnahmefälle noch die Zeichen 1 bis 31.)

Das geht ja noch weiter mit historischem Ballast. Eine Datei namens "nul.txt" bekommst du unter Windows nie zu sehen …

Moderator #7790477
Lesenswert?

Ob S. schrieb:

Nunja, bei Windows wird eben versucht, diese potentiellen Probleme durch Kollisionen mit der in der Text-Shell reservierten Zeichen proaktiv zu verhindern. Kommt mir irgendwie als durchaus sinnvolle Strategie vor.

Wenn der Explorer, Die Dateidialoge, die Shells und vermutlich noch jede Menge weiterer Anwendungen mit diesen Zeichen nicht zurechtkommen, wäre es konsequenter zielführender, die Restriktion direkt in der gemeinsamen Basis, nämlich dem Filesystem unterzubringen. Damit wäre garantiert, dass die verbotenen Zeichen niemals in einem Dateinamen landen können, egal wie buggy die darüberliegende Software ist.

Noch besser wäre es natürlich, wenn Microsoft den Explorer und die Shells dahingehend überarbeiten würde, dass die Restriktionen gar nicht erst nötig sind (Unix/Linux zeigt ja, wie das geht). Da da aber gerade beim Explorer und cmd.exe wohl viel Legacy-Software im Spiel ist, deren Entwickler längst geflüchtet sind, wird sich da wohl keiner heranwagen.

Übrigens: auf "unterster" Ebene (also im ntoskrnl) hat Windows exakt dieselben Einschränkungen für Dateinamen wie Linux. Es sind genau nur zwei Zeichen nicht erlaubt: Der Pfad-Delimeter und das Null-Zeichen.

Gleiches gilt auch für NTFS, das ebenfalls nichts von den verbotenen Zeichen weiß, und genau hier liegt das Problem:

Ohne viel Trickserei und völlig NTFS-konform kann ein Dateiname erzeugt werden, der den Rest des Systems in arge Verlegenheit bringt. Man muss dazu nicht einmal auf "unterster" Ebene herumprogrammieren. Es genügt schon, einen mit NTFS formatierten USB-Stick auf einem Nicht-Windows-PC entsprechend zu beschreiben, was auch ohne böse Absicht passieren kann.

Beispiel:

Ich möchte mittels NTFS-USB-Stick Messdaten von einem Linux-basierten Labor-PC auf einen Windows-basierten Büro-PC kopieren. Die Daten liegen in zwei Dateien namens

"Messung für t<1000s.dat"

und

"Messung für t>=1000s.dat"

vor. Beide Namen sind sowohl Linux- als auch NTFS-konform.

Ich kopiere sie ins Root-Verzeichnis des USB-Sticks, wo schon andere Dateien liegen. Im Windows-Explorer poppt eine Meldung auf, wonach der USB-Stick nicht lesbar oder korrupt sei.

Da auch auf die bereits existierenden Dateien nicht mehr zugegriffen werden kann, vermutet der unbedarfte Windows-User ein Problem mit dem USB-Stick und formatiert ihn neu oder schmeißt in gleich ganz weg. Tatsächlich sind aber sowohl der USB-Stick als auch die darauf befindlichen Daten noch völlig in Ordnung.

Wenn ich den USB-Stick wieder in den Linux-PC stecke und die beiden Dateien passend umbenenne, funktioniert er anschließend auch unter Windows wieder perfekt.

#7790505
Lesenswert?

Der (Windows-)Rechner meiner Frau ist auf rumänisch eingestellt, und am Anfang hat sie Dateien mit den rumänischen Sonderzeichen benannt. Das führte dann zu Problemen auf dem Server dass ich die Dateien von meinem Rechner nicht mehr sah oder löschen konnte. Bin mir jetzt nicht mehr sicher.

Dasselbe aus chinesischen DLs mit ihren lustigen Dateinamen, musste ich alle löschen oder umbenennen!

Seit einiger Zeit habe ich mir angewöhnt sämtliche Dateien und Verzeichnisse ohne Spaces zu benennen, stattdessen mit "_".

Gruss Chregu

#7790520
Lesenswert?

Jörg W. schrieb:

Das geht ja noch weiter mit historischem Ballast. Eine Datei namens "nul.txt" bekommst du unter Windows nie zu sehen …

Versuche mal, ein Verzeichnis namens Prn zu erzeugen.

Yalu X. schrieb:

Wenn der Explorer, Die Dateidialoge, die Shells und vermutlich noch jede Menge weiterer Anwendungen mit diesen Zeichen nicht zurechtkommen, wäre es konsequenter zielführender, die Restriktion direkt in der gemeinsamen Basis, nämlich dem Filesystem unterzubringen.

Warum sollte der Explorer und die ganzen anderen graphischen Anwendungen Probleme mit Zeichen wie > haben? Der einzige Grund, warum das Zeichen verboten ist, ist, weil es auf der Shell für redirect von stdout verwendet wird. Bei einem : sehe ich es ja noch ein. Das braucht man halt, weil Windows es bis heute noch nicht geschafft hat, von den alten Laufwerksbuchstaben loszukommen. Das ist nicht shell-spezifisch.

Übrigens: Unter DOS war auch das + in Dateinamen verboten, weil man mit dem Shell-Kommando COPY mit der etwas kruden Syntax

1
copy a.txt+b.txt c.txt

zwei Dateien konkatenieren konnte.

Gleiches gilt auch für NTFS, das ebenfalls nichts von den verbotenen Zeichen weiß, und genau hier liegt das Problem:

NTFS kann vieles, z.B. auch Symlinks, aber Windows hat es nie geschafft, die auch nur annähernd brauchbar ins System zu integrieren.

Es genügt schon, einen mit NTFS formatierten USB-Stick auf einem Nicht -Windows-PC entsprechend zu beschreiben, was auch ohne böse Absicht passieren kann.

Spaßig wird es auch, wenn man z.B. zwei Dateien names Hallo.txt und hallo.txt anlegt.

Moderator #7790662
Lesenswert?

Rolf M. schrieb:

Spaßig wird es auch, wenn man z.B. zwei Dateien names Hallo.txt und hallo.txt anlegt.

Allerdings. hab's gerade mal ausprobiert :)

Jörg W. schrieb:

Vermutlich „gewinnt“ dann die, die im Verzeichnis physisch zuerst steht. ;-)

So scheint es tatsächlich zu sein :)

Es wirkt schon etwas befremdlich, wenn man im Explorer eine Datei doppelklickt, aber eine ganz andere geöffnet wird. Wirklich spooky wird es, wenn man eine Datei umbenennt oder löscht und die Operation nicht auf der ausgewählten Datei, sondern auf einer an anderer Stelle in der Auflistung stehenden Datei ausgeführt wird, wobei die ausgewählte Datei unverändert stehen bleibt =8-o

Irgendwie passen Windows und NTFS nicht wirklich gut zusammen, auch wenn in einer Windows-Only-Welt lebende Leute nicht viel davon mitbekommen.

Mir scheint, dass die NTFS-Entwickler damals voller Enthusiasmus vorgeprescht sind, ohne auf die behäbigeren Shell-Entwickler Rücksicht zu nehmen. Da sich diese überrannt gefühlt haben, haben sie – statt ihre Softwarekomponenten entsprechend anzupassen – aus Trotz zum Gegenschlag ausgeholt und die VFAT-Erweiterung für die klassischen FAT-Filesysteme entwickelt, um auch ohne NTFS lange Dateinamen zu ermöglichen. Die Implementierung von VFAT ist zwar ziemlich murksig (für die Speicherung langer Dateinamen werden versteckte Volume-Label-Einträge missbraucht), dafür aber weitgehend abwärtskompatibel.

Moderator Persönliche Seite #7790726
Lesenswert?

Yalu X. schrieb:

Mir scheint, dass die NTFS-Entwickler damals voller Enthusiasmus vorgeprescht sind, ohne auf die behäbigeren Shell-Entwickler Rücksicht zu nehmen.

NTFS ist halt HPFS, welches für OS/2 als gemeinsames Projekt von IBM und Microsoft konzipiert war. Bei Windows ist dann außer dem Filesystem nur nichts mehr groß sonst davon übrig geblieben.

Wäre ja sicher auch noch lustig, das Ganze dann nochmal unter WSL anzusehen. Kann man dort eigentlich ein aux.c anlegen? (Eine Datei mit diesem Namen hatte ich in den Tests von AVR-LibC mit drin, und es brachte mir dann irgendwann einen Bugreport ein, weil man das unter Windows nicht auschecken konnte.)

#7794737
Lesenswert?

Max H. schrieb:

Die ganze Sache wird besonders lustig, wenn Du WSL laufen hast und ein EXT4 Volume ins Dateisystem einbindest.

Dann bricht für Win die Hölle los.

Das klingt aber spannend, wie darf man sich das vorstellen?

Cygwin hatte zwar auch den ein oder anderen Bug, vor allem im Umgang mit Edits in Editoren, aber so unterm Strich war Cygwin oft eine positive Überraschung, und teilweise auch recht lustig bzw. unterhaltsam.

Beim DOS waren die Strings übrigens per DOS-Interrupt noch Dollar-Zeichen-Terminiert. Mit entsprechendem KnowHow auf der Systemebene (das halt nicht jeder hat) kann man auch Passwortcracker länger rechnen lassen. (u.a. auch: https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange)

Ein anderer Punkt ist natürlich noch die Programmiersprachenlogistik bei C. Man muss sich halt festlegen, welche Zeichen in der Compilerauswertung Steuerzeichen (und keine "Daten") sein sollen (oder können..). Diese Art von Festsetzungen geht bei Programmiersprachen oft noch bis in die Variablen-Namen-Vergebung.

C hat mit seiner Auswahl und dem Sprachdesign aber auch ein hohes Maß an Standardisierung mitgebracht. Andere Sprachen wie Assembler oder Lisp sind weniger standardisiert, deswegen aber auch sehr Dialektanfällig und so gibt es oft viele Versionen. Bei Assembler z.B. Masm, Tasm, Nasm usw, dann auch noch die AT&T Syntax und Lisp hat eben viele Neuschaffungen wie Rust, Haskell oder OCaml und viele weitere "Programmiersprachen"(- Ideen) auf dieser Basis.

#7794807
Lesenswert?

"Known problems Character translation must be used to accommodate filenames which include a colon (:) or other characters that do not comply with the naming conventions of Windows file-systems. Files with the same name but different cases are also not allowed by default, but can be enabled on installation with the side-effect of making the underlying partition's filesystem case-sensitive,[6][7] even for the Win32 subsystem.

Network authentication for UNIX systems relies on the insecure NIS protocol (LDAP- and Kerberos-based authentication require a third-party solution). Microsoft has released several hotfixes for Windows Services for UNIX, and at least one Security Update (KB939778). The GNU Project utilities are several versions older than the latest ones. A separate port of the up-to-date Debian utilities was started in 2007, but apparently abandoned in 2009.[8] Several of the text processing utilities in SUA (e.g. awk) are not compatible with Unicode or wide character text files." aus: https://en.wikipedia.org/wiki/Windows_Services_for_UNIX

(Firma: 1984now) #7794905
Lesenswert?

Rolf M. schrieb:

Spaßig wird es auch, wenn man z.B. zwei Dateien names Hallo.txt und hallo.txt anlegt.

Kann dir eben unter Win32 nicht passieren. Genau das ist der Trick. Es werden schon beim Schreiben all die bestehenden Restriktionen beachtet, so dass fehlerträchtiger Mist erst garnicht auf dem Datenträger landen kann.

Im Übrigen erschließt ich mir auch nicht der tiefere Sinn der gleichzeitigen Existenz von "Hallo.txt" und "hallo.txt" in einem einzigen Verzeichnis. Wozu soll das gut sein?

#7794972
Lesenswert?

Ob S. schrieb:

Im Übrigen erschließt ich mir auch nicht der tiefere Sinn der gleichzeitigen Existenz von "Hallo.txt" und "hallo.txt" in einem einzigen Verzeichnis. Wozu soll das gut sein?

Es spart CPU, da beim createFile nicht mehr auf Duplikate in allen möglichen Groß-/Kleinschreibungsvarianten geprüft werden muss. Im Ernst - was soll der tiefere Sinn sein, dies explizit zu beschränken?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren