Как безопасно добавить имя файла в аргумент пути к папке 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.
Примечание. Это тот случай, когда я публикую парный вопрос и ответ. Эта проблема была проблемой в моей жизни в течение ряда лет, и я только недавно обнаружил простое решение, которое, я думал, может заинтересовать других.