Wie kann ein Dateiname sicher an ein Windows-Ordnerpfadargument angehängt werden?
Angenommen, ich habe ein Batch-Skript, das einen Ordnerpfad im Argument @ erwarte%1
. Ich möchte einen Dateinamen an den Pfad anhängen und diesen in einem Befehl verwenden. Gibt es eine einfache Möglichkeit, dies auf eine Weise zu tun, die in allen Situationen zuverlässig ist?
Ich will nichtPUSHD %1
und ignoriere einfach den Pfad danach. Angenommen, meine Logik erfordert, dass das aktuelle Verzeichnis unverändert bleibt.
Das Problem ist das%1
as Argument @ kann einen abschließenden Backslash haben oder auch nicht - d. c:\path
oderc:\path\
.
Typischerweise kann ich einfach @ verwend"%~1\file.ext"
weil Windows behandelt"c:\path\file.ext"
und"c:\path\\file.ext"
identisch.
Aber es gibt einen bösen Fall -c:\
Die folgenden Befehle erzeugen diesen Fehler:The filename, directory name, or volume label syntax is incorrect.
dir "c:\\file.ext"
del "c:\\file.ext"
Das Seltsame ist, diese Befehle funktionieren einwandfrei:
if exist "c:\\file.ext" echo OK
echo text>"c:\\file.ext"
copy "c:\\file.ext" "somePath"
xcopy "c:\\file.ext" "somePath"
Es gibt einen anderen problematischen Fall -c:
, was bedeutet, dass das aktuelle Verzeichnis auf Laufwerk C: das falsche Ergebnis liefert, wenn ich einen Backslash anhänge."c:file.ext"
ist nicht dasselbe wie"c:\file.ext"
.
Gibt es eine einfache Möglichkeit, einen Dateinamen sicher an ein bestimmtes Argument für den Ordnerpfad anzuhängen?
Ich beschäftige mich nicht mit UNC-Pfaden, da ich sie nicht sehr oft verwende, und ich glaube, dass es einige Befehle gibt, die mit UNC-Pfaden nicht gut funktionieren.
Hinweis: Dies ist ein Fall, in dem ich eine gepaarte Frage und Antwort poste. Dieses Problem ist mir seit einigen Jahren ein Dorn im Auge und ich habe kürzlich eine einfache Lösung entdeckt, an der andere interessiert sein könnten.