Как безопасно добавить имя файла в аргумент пути к папке Windows?

Предположим, у меня есть пакетный скрипт, который ожидает путь к папке в аргументе%1, Я хочу добавить имя файла к пути и использовать его в команде. Есть ли простой способ сделать это так, чтобы он был надежным во всех ситуациях?

я не хочуPUSHD %1 и просто игнорировать путь потом. Предположим, что моя логика требует, чтобы текущий каталог оставался неизменным.

Проблема заключается в%1 Аргумент может иметь или не иметь завершающую обратную косую черту - т.е.c:\path или жеc:\path\.

Обычно я могу просто использовать"%~1\file.ext" потому что винда лечит"c:\path\file.ext" а также"c:\path\\file.ext" одинаково.

Но есть один неприятный случай -c:\

Следующие команды выдают эту ошибку:The filename, directory name, or volume label syntax is incorrect.

dir "c:\\file.ext"
del "c:\\file.ext"

Странно то, что эти команды работают просто отлично:

if exist "c:\\file.ext" echo OK
echo text>"c:\\file.ext"
copy "c:\\file.ext" "somePath"
xcopy "c:\\file.ext" "somePath"

Есть еще один проблемный случай -c:, то есть текущий каталог на диске C :, даст неправильный результат, если я добавлю обратную косую черту."c:file.ext" это не то же самое, что"c:\file.ext".

Есть ли простой способ безопасно добавить имя файла к любому заданному аргументу пути к папке?

Меня не интересуют пути UNC, так как я их не очень часто использую, и я считаю, что есть некоторые команды, которые плохо работают с путями UNC.

Примечание. Это тот случай, когда я публикую парный вопрос и ответ. Эта проблема была проблемой в моей жизни в течение ряда лет, и я только недавно обнаружил простое решение, которое, я думал, может заинтересовать других.

Ответы на вопрос(3)

Ваш ответ на вопрос