2012-03-28 3 views
6

Ich probiere einige Dinge auf Windows mit Emacs aus. In meinem Fall muss ich den Dateipfad mit Backslash von elisp zurückgeben. Aber elisp gibt den Pfad immer mit Schrägstrich zurück.Wie bekomme ich Windows-Pfad mit Backslash von elisp

(expand-file-name "text.log" "d:\\ProgramData\\temp") 
=> d:/ProgramData/temp/text.log 

Meine Forderung:

(expand-file-name "text.log" "d:\\ProgramData\\temp") 
=> d:\ProgramData\temp\text.log 

Es kann mit regexp getan werden, aber ich brauche mehr einfache Art und Weise.

Antwort

7

Passt convert-standard-filename in (elisp) Standard File Names Ihrem Bedarf?

+0

Beachten Sie, dass dies nicht die beabsichtigte Verwendung von 'convert-standard-filename' ist, daher kann es in einigen Fällen fehlschlagen (z. B. einen Namen zurückgeben, der nicht auf dieselbe Datei verweist). – Stefan

+0

@Stefan: Einverstanden. Aber ich verstehe auch den Zweck von Luozengbin nicht, weil Emacs und einige Werkzeuge in Windows auch mit Schrägstrich umgehen können. Auf solchen Systemen gibt 'converter-standard-filename' einen anderen Dateinamen zurück, der ursprüngliche Dateiname ist ungültig. Wenn Luozengbin diesen Namen an andere Tools weitergeben möchte, kann das Umbenennen das richtige Verhalten sein. – OwnWaterloo

+0

Hallo. Danke für deine Hilfe. Ich möchte den Dateinamen an andere Tools übergeben, aber die Tools unterstützt nicht posix path.so ich muss es konvertieren. – luozengbin

5

Natürlich sollte (subst-char-in-string ?/ ?\\ <file>) den Trick tun. Aber beachte auch, dass Schrägstriche fast überall in Windows funktionieren (das einzige Werkzeug, das ich kenne, das sie nicht unterstützt, ist die Standard "Shell" (command.com, cmd.exe, oder so ein Name)), also vielleicht nicht einmal brauche diese Umwandlung.