Проблема с кавычками вокруг имен файлов в командном процессоре Windows

У меня есть 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 здесь?

6
задан 28.01.2011, 10:08

1 ответ

Это что help cmd говорит о заключении в кавычки:

Если/C или/K указаны, то остаток от командной строки после переключателя обрабатывается как командная строка, где следующая логика используется для обработки кавычки (") символы:

  1. Если всем следующим условиям отвечают, то символы кавычки на командной строке сохраняются:

    • никакой переключатель/S
    • точно два символа кавычки
    • никакие специальные символы между этими двумя символами кавычки, где особенный один из: и <> () @^ |
    • между этими двумя символами кавычки существует один или несколько пробельных символов
    • строка между этими двумя символами кавычки является названием исполняемого файла.
  2. Иначе старое поведение состоит в том, чтобы видеть, является ли первый символ символом кавычки и если так, разделите начальный символ и удалите последний символ кавычки на командной строке, сохранив любой текст после последнего символа кавычки.

Так удвойте первые и последние кавычки, и это должно работать:

cmd /c ""C:\Program Files\TortoiseSVN\bin\subwcrev.exe" .. ..\Modules\getbuildinfo.c "Win32-temp-Debug\getbuildinfo2.c""
8
ответ дан 07.12.2019, 15:58

Теги

Похожие вопросы