Я пытаюсь сделать это:
cmd.exe /C "C:\Program Files\Somewhere\SomeProgram.exe" > "C:\temp\Folder Containing Spaces\SomeProgram.out"
Однако у меня есть проблемы, связанные с тем, как работает cmd.exe. Если вы прочитаете справку для нее, она обрабатывает символы в специальном виде. См. Справку в конце вопроса. Таким образом, это не выполняется правильно... Я предполагаю, что cmd.exe разбивает некоторые кавычки, что делает выражение плохо сформировано.
Я могу сделать это успешно:
// quotes not required around folder with no spaces
cmd.exe /C "C:\Program Files\Somewhere\SomeProgram.exe" > C:\temp\FolderWithNoSpaces\SomeProgram.out
Но мне действительно нужен первый, чтобы работать. Есть ли место вокруг странной обработки цитаты, которую использует cmd.exe? Я хочу, чтобы он сохранил все кавычки, но, похоже, нет возможности сделать это.
Справка взята из вывода: cmd/?
Если задано /C или/K, остальная часть командной строки после коммутатор обрабатывается как командная строка, где следующая логика используемые для обработки символов цитаты ("):
1. If all of the following conditions are met, then quote characters
on the command line are preserved:
- no /S switch
- exactly two quote characters
- no special characters between the two quote characters,
where special is one of: &<>()@^|
- there are one or more whitespace characters between the
the two quote characters
- the string between the two quote characters is the name
of an executable file.
2. Otherwise, old behavior is to see if the first character is
a quote character and if so, strip the leading character and
remove the last quote character on the command line, preserving
any text after the last quote character.