Warum hat die cmd.exe -shell auf einem Windows-Fehler mit Pfade mit einem Schrägstrich ('/") Pfad-separator?
Nur, wenn ich dachte, ich hätte alles gesehen, mit Windows-Pfad-Probleme, ich habe mir heute begegnet einem Fall, nur nicht, wenn '/' (Schrägstrich) als Pfad-Trennzeichen verwendet wird:
C:\temp\tcbugs>mkdir "dir1 with spaces"
C:\temp\tcbugs>echo hi > "dir1 with spaces"\foo.txt
C:\temp\tcbugs>type "dir1 with spaces\foo.txt"
hi
C:\temp\tcbugs>type "dir1 with spaces/foo.txt"
The system cannot find the file specified.
Was ist besonders interessant daran ist, dass es scheint, die speziell für die cmd.exe shell und kommt nicht in PowerShell (noch vermutlich in der win32-API):
PS C:\temp\tcbugs> type 'dir1 with spaces/foo.txt'
hi
Weiterer Punkt von Interesse ist, dass Verzeichniswechsel mit 'cd' und mit '/' als Pfadtrenner mit cmd.exe funktioniert:
C:\temp\tcbugs>mkdir dir2_no_spaces
C:\temp\tcbugs>cd ./dir2_no_spaces
C:\temp\tcbugs\dir2_no_spaces>cd ..
Doch, ich kann nicht finden jede Bezugnahme auf dieses problem überall online, noch in der MSDN die häufigsten zitierte Dokumentation:
Naming Files, Paths, Namespaces
Das führt mich zu der Frage: warum passiert das, und gibt es eine eindeutige Quelle, die Dokumente, die diese Marotte?
UPDATE:
dbenham weist darauf hin, dass das problem vorhanden ist, unabhängig davon, ob Leerzeichen im Verzeichnis-Namen, so entfernt Verweis auf das in Titel und Frage Körper. Auch Hinzugefügt ein Beispiel für 'cd ./' das funktioniert, während andere Befehle nicht.
/
können verwendet werden als Pfad-separator auf API-Ebene, aber Sie sind nicht Aufruf der API direkt. Sie sind mit cmd.exe und cmd.exe analysiert die /
als Kommandozeilen-option.Ich vermutete, so viel, aber auch erwartet, etwas über diesen Fall würde irgendwo dokumentiert sein speziell. Die Unterlagen, die ich gefunden habe, Abdeckung Pfad-Separatoren-auch im Rahmen der cmd-shell--nicht erwähnen, dieses Besondere Problem, so weit ich erzählen kann.
Wo ist die Dokumentation, die sagt slash kann verwendet werden als Pfad-Trennzeichen in cmd.exe?
Die Räume haben nichts mit dem problem zu tun. Auch wenn die Ordner keine Leerzeichen im Namen, der Schrägstrich funktioniert immer noch nicht.
Raymond-Wenn ich jetzt gerade nicht wirklich etwas sehen, erwähnt cmd.exe ausdrücklich zu.
InformationsquelleAutor Garen | 2012-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeitet zu entfernen Stellungnahme
Ob oder ob nicht Windows CMD.EXE unterstützen soll, Schrägstriche in den Pfaden, die Tatsache ist, manchmal funktioniert es, manchmal nicht, und manchmal scheint es zu funktionieren, aber gibt das falsche Ergebnis - AKA einen Fehler.
Ist es Zeit für einige Experimente 🙂
Waren alle tests laufen auf Vista
Hier ist ein Fall, der deutlich zeigt, ein Fehler.
Kann man darüber diskutieren, ob die Windows-CMD ist "angeblich" zu unterstützen Schrägstriche. Aber das Letzte Ergebnis ist ein bug! Auch wenn es ist operator Fehler mit einem Schrägstrich, sollte Windows nicht geben, das Ergebnis.
Was ist Ihre Grundlage für die Beschreibung das Verhalten als bug? (Raymond Chen gebeten, die oben, wo ist die Dokumentation, die besagt, dass
cmd
annehmen sollte, Schrägstriche als Trennzeichen für Pfade?) Und als Larry Osterman erwähnt, die Herkunft der Verwendung der Schrägstrich als die option Trennzeichen möglicherweise nicht sogar sein, dass Microsoft da tut. Würden Sie beschreiben, wie ein "bug" das Verhalten der Unix-tradition-Befehle, die nicht umgehen können mit dem Datei-Namen beginnen mit-
ohne Besondere Anordnung?Ich halte es für einen bug (oder Designfehler), wenn ein system gibt inkonsistente Ergebnisse. Ich wäre vollkommen glücklich, wenn CMD arbeitete mit Schrägstrich im Wege oder nicht, aber manchmal funktioniert und manchmal nicht ist ein Fehler in meinem Buch. Und zu meinem letzten Beispiel in der bearbeiteten Antwort zeigt deutlich ein Problem, durch jede vernünftige definition von "Fehler" ist, dass ich mir denken kann. Ich habe entfernt die Stellungnahme der Antwort und hielt sich an die Fakten. Aber in diesem Kommentar werde ich sagen: "ich glaube, dass MS versucht, Unterstützung forward-slashes in Pfaden und endete mit einem buggy undokumentierte Funktion".
Ich bin fast sicher, MS hat nicht versucht zu unterstützen Schrägstriche in
cmd
. Sie (absichtlich) unterstützen Sie in der API, aber incmd
es passiert einfach zu arbeiten, wenn der text nur an, um API und nicht, wenn es geparst wird. Der Unterschied zwischenmd
undtype
sowohl als built-in-Kommandos, ist wirklich neugierig.Ich nehme an, dass die Entwickler von
cmd
gewesen sein könnte naiv an die API ' s interpretation von/
, aber ich bezweifle es. So oder so, Sie sollte bekannt war und entsprechend gestaltet. Es sollte eine bewusste Entscheidung, um entweder unterstützen/
als Pfad-Trennzeichen in allen internen Kommando-Situationen, oder aber deaktivieren Sie es in allen Fällen. Das ist meine Meinung trotzdem. 🙂 Oder zumindest dokumentieren, dass/
ist unzuverlässig als Pfad-Trennzeichen und sollte daher vermieden werden.InformationsquelleAutor dbenham
Wie hatten ein seltsames Verhalten mit slash und wir verfolgt es, bis auf die Tatsache, dass ein Pfad mit einem führenden Schrägstrich gesehen ist nicht als ein absoluter Pfad, also
Vielleicht erklärt auch die Fehler, die oben angeführt - ich bin nicht klar, auf welches Verzeichnis die Befehle ausgeführt werden.
cd /temp
funktioniert gut für mich, behandeln Sie es als root-Ordner. Aber die anderen Fehler, die ich Liste in meinem post sind immer noch gültig.Dies sind interessante Beispiele, aber Sie nicht einmal ansatzweise die Frage des "warum".
InformationsquelleAutor Martin Althaus
Ich bin nicht sicher, warum das '/' ist die Arbeit in PS. Zurück zu der Geschichte, DOS-basiert auf UNIX und es ist eine kleine Gruppe von UNIX. In der UNIX-Pfadtrenner '/', während in DOS ist es '\'. Ich arbeitete auf einigen Windows-und DOS-apps vor. Um zu konvertieren, einige UNIX-Muster wie Befehle oder Pfad und stellen Sie sicher, dass Sie gültige DOS-Befehl oder Pfad, schrieb ich einen kleinen Konverter zu verwandeln,'/', ' \ " wie diese:
Können Sie dieses feature hinzufügen zu tolerant '/' in Ihrem app-im Fall der Zugriff auf Dateien in Windows. Ich denke, PS kann diese Art Konverter zu ermöglichen Befehl oder der Pfad mit '/' oder '\', oder Windows wird mit einem '/' im Dateinamen.
Wenn Sie verwenden .NET oder Mono, die Sie verwenden können, Weg.DirectorySeparator statt hart zu codieren. msdn.microsoft.com/en-us/library/...
-1 tut mir Leid, aber "DOS-basiert auf UNIX und es ist eine kleine Gruppe von UNIX.", das hat die die größte Gotteslästerung überhaupt!!! Tatsächlich, DOS war etwas basierend auf CP/M.
Es funktioniert in PS, weil Sie die parsing-Regeln sind anders, und wenn der string wird unverändert an die API, es funktioniert.
Wenn Sie verwenden .NET oder Mono-oder C++ oder nichts, können Sie immer verwenden
/
.cmd.exe
ist die nur (oder zumindest habe ich nie header von allen anderen) Teil von Windows, wo die Schrägstriche nicht funktionieren.InformationsquelleAutor David.Chu.ca