У меня есть Windows XP Домашнее выполнение SP3. Попытка выполнить эту команду:
cmd /c "C:\Program Files\TortoiseSVN\bin\subwcrev.exe" .. ..\Modules\getbuildinfo.c Win32-temp-Debug\getbuildinfo2.c
Это хорошо работает (проигнорируйте точную программу и имена файлов). Однако при заключении в кавычки последнего аргумента, я получаю ошибку:
cmd /c "C:\Program Files\TortoiseSVN\bin\subwcrev.exe" .. ..\Modules\getbuildinfo.c "Win32-temp-Debug\getbuildinfo2.c"
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Когда выполнено без cmd /c
но непосредственно, обе командных строки, выполненные без ошибок. Я использовал cmd /c
для отладки подобной проблемы, я имел с system
вызовы из программы C.
Что не так с cmd
здесь?
Это что help cmd
говорит о заключении в кавычки:
Если/C или/K указаны, то остаток от командной строки после переключателя обрабатывается как командная строка, где следующая логика используется для обработки кавычки (") символы:
Если всем следующим условиям отвечают, то символы кавычки на командной строке сохраняются:
- никакой переключатель/S
- точно два символа кавычки
- никакие специальные символы между этими двумя символами кавычки, где особенный один из: и <> () @^ |
- между этими двумя символами кавычки существует один или несколько пробельных символов
- строка между этими двумя символами кавычки является названием исполняемого файла.
- Иначе старое поведение состоит в том, чтобы видеть, является ли первый символ символом кавычки и если так, разделите начальный символ и удалите последний символ кавычки на командной строке, сохранив любой текст после последнего символа кавычки.
Так удвойте первые и последние кавычки, и это должно работать:
cmd /c ""C:\Program Files\TortoiseSVN\bin\subwcrev.exe" .. ..\Modules\getbuildinfo.c "Win32-temp-Debug\getbuildinfo2.c""