Angenommen, ich verfüge über ein Stapelscript, das im Argument %1
einen Ordnerpfad erwartet. Ich möchte einen Dateinamen an den Pfad anhängen und diesen in einem Befehl verwenden. Gibt es eine einfache Möglichkeit, dies in allen Situationen zuverlässig zu tun?Wie kann ein Dateiname an ein Windows-Ordnerpfad-Argument angehängt werden?
Ich möchte nicht PUSHD %1
und ignorieren Sie einfach den Pfad danach. Angenommen, meine Logik erfordert, dass das aktuelle Verzeichnis unverändert bleibt.
Das Problem ist, das %1
Argument kann oder nicht beendet Backslash haben kann - das heißt c:\path
oder c:\path\
.
Normalerweise kann ich einfach "%~1\file.ext"
verwenden, weil Windows "c:\path\file.ext"
und "c:\path\\file.ext"
identisch behandelt.
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, arbeiten diese Befehle einfach gut:
if exist "c:\\file.ext" echo OK
echo text>"c:\\file.ext"
copy "c:\\file.ext" "somePath"
xcopy "c:\\file.ext" "somePath"
Es ist ein weiterer problematischer Fall - c:
, was bedeutet, das aktuelle Verzeichnis auf Laufwerk C :, wird das falsche Ergebnis geben, wenn ich einen Backslash anhängen. "c:file.ext"
ist nicht dasselbe wie "c:\file.ext"
.
Gibt es eine einfache Möglichkeit, einen Dateinamen an ein bestimmtes Ordnerpfadargument sicher anzuhängen?
Ich bin nicht mit UNC-Pfaden beschäftigt, wie ich sie nicht sehr oft benutze, und ich glaube, es gibt einige Befehle, die nicht gut mit UNC-Pfaden spielen.
Hinweis: Dies ist ein Fall, in dem ich gepaarte Fragen und Antworten posten möchte. Dieses Problem ist seit einigen Jahren ein Dorn in meiner Seite, und ich entdeckte vor kurzem eine einfache Lösung, die ich dachte, andere interessieren könnten
Sorry, Sie haben vergessen, 'c: .', das wird in 'c: .. \ file' konvertiert. –
Es funktioniert nicht im Stamm einer Freigabe, zB' \\ server \ share. \ file.ext' funktioniert nicht. Ansonsten funktioniert es gut für UNC-Pfade. Es wird auch nicht für lange Pfade funktionieren, d. H. Beginnend mit \\? \ –
@MC ND - Richtig, du bist es! Das ist ein wichtiger Fall. Ich glaube, ich habe das Problem behoben, indem ich den Modifier '~f' hinzugefügt habe. Die Antwort wurde geändert. Vielen Dank! – dbenham