Помимо всего прочего, вы должны использовать% l вместо% 1. Таким образом, ваша программа получит полное (длинное) имя файла, а не короткое (DOS 8.3).
РЕДАКТИРОВАТЬ: ответ на вопрос Роба в комментариях
Кажется, что почти невозможно найти "% l" и "% 1" (включая знак процента), используя поиск Google или MSDN. :( Тем не менее, я нашел довольно хорошее описание в
The Old New Thing - '% 1' автоматически определяет, поддерживает ли ваша программа длинные имена файлов и передает либо короткие, либо длинные имена. Кажется, что все современные системы носят длинное имя , если ваш exe не может быть найден (по крайней мере, так я понимаю разоблачение Раймонда).
Если прокрутить комментарии вниз (выполнить поиск «% l» на странице), вы найдете список всех поддерживаемых параметров, взятых с какой-то страницы, которая больше не существует (но я нашел старую копию в Интернет-архив ). На этой странице также нет ссылки на документацию Microsoft, поэтому я не могу дать вам официальную ссылку: (
Роб, спасибо за вопрос - теперь я знаю о% 1 /% l больше, чем раньше :) +1 за это.