Warum schlägt die cmd.exe-Shell unter Windows bei Pfaden mit einem Schrägstrich ('/' ') fehl?
Gerade als ich dachte, ich hätte alles mit Windows-Pfadproblemen zu tun, ist jetzt ein Fall aufgetreten, der nur fehlschlägt, wenn '/' (Schrägstrich) als Pfadtrennzeichen verwendet wird:
<code>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. </code>
Das Besondere daran ist, dass es anscheinend spezifisch für die cmd.exe-Shell ist und in PowerShell (und vermutlich auch in der win32-API) nicht vorkommt:
<code>PS C:\temp\tcbugs> type 'dir1 with spaces/foo.txt' hi </code>
Ein weiterer interessanter Punkt ist, dass das Ändern von Verzeichnissen mit 'cd' und das Verwenden von '/' als Pfadtrennzeichen mit cmd.exe funktioniert:
<code>C:\temp\tcbugs>mkdir dir2_no_spaces C:\temp\tcbugs>cd ./dir2_no_spaces C:\temp\tcbugs\dir2_no_spaces>cd .. </code>
Ich kann jedoch weder online noch in der häufig zitierten Dokumentation von MSDN einen Hinweis auf dieses bestimmte Problem finden:
Benennen von Dateien, Pfaden, Namespaces
Was mich dazu bringt zu fragen: Warum passiert das und gibt es eine definitive Quelle, die diese Eigenart dokumentiert?
AKTUALISIEREN:
dbenham weist darauf hin, dass das Problem vorhanden ist, unabhängig davon, ob sich Leerzeichen in einem Verzeichnisnamen befinden. Daher wurde der Verweis darauf im Titel und im Fragenkörper entfernt. Es wurde auch ein Beispiel für 'cd ./' hinzugefügt, das funktioniert, während andere Befehle dies nicht tun.