У меня похожая проблема, подобная этой. Как избежать пробелов в командной строке в Windows без использования кавычек?

Но, кажется, я не могу использовать каретки

C:\>C:\Program^ Files^ (x86)\Adobe\Reader^ 11.0\Reader\AcroRd32.exe
C:\Program Files is not recognized as an internal or external command, operable program or batch file.

CD работает нормально:

C:\>cd C:\Program^ Files^ (x86)\Adobe\Reader^ 11.0\Reader\
C:\Program Files (x86)\Adobe\Reader 11.0\Reader>

Я звоню в Adobe Reader из приложения C++ с

UniString cmd("\"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe\" ");
system(cmd.ToCStr());

Это нормально, Adobe Reader запущен. Но когда я добавляю еще один экранированный кавычки, чтобы передать путь аргумента в PDF

UniString cmd("\"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe\" \"");
cmd.Append("A\\B with space\\C\\test.pdf");
cmd.Append("\"");
system(cmd.ToCStr());

я получил

C:\Program is not recognized as an internal or external command, operable program or batch file. 

Что здесь происходит? Почему я не могу использовать каретки или экранированные кавычки больше раз?

(Боже, я так ненавижу окна)

3 ответа3

1

Я считаю, что вы должны использовать функцию CreateProcess() вместо того, чтобы запускать программу cmd.exe и затем указывать ей запускать acrobat.

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

обновление: я только что бросил быстрый взгляд, поскольку у кого-то еще был похожий вопрос, который дает ответ, который может помочь: https://stackoverflow.com/questions/486087/how-to-call-an-external-program-with-parameters

0

Я решил это:

для system() мне пришлось использовать две экранированные кавычки

UniString cmd("\"\"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe\" \"D:\\Second Path\\Foo\\Bar\"\");
system(cmd.ToCStr());

или лучше с WinExec()

UniString cmd("\"C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe\" \"D:\\Second Path\\Foo\\Bar\");
WinExec(cmd.ToCStr(),SW_SHOW);
0

Заключите всю строку в двойные кавычки, например: "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .