cmd.exe экранирование символов
От: binks Россия  
Дата: 20.09.22 07:12
Оценка:
Добрый день.

Почему так работает
"C:\\Program Files (x86)\\Microsoft Office\\Office16\\WINWORD.EXE" "c:\\tmp\\docx_templates\\with space\\1.docx" /w /x

а так нет
cmd /c "C:\\Program Files (x86)\\Microsoft Office\\Office16\\WINWORD.EXE" "c:\\tmp\\docx_templates\\with space\\1.docx" /w /x

--

"C:\\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

?

Как во втором варианте передать путь к файлу?
Re: cmd.exe экранирование символов
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.22 07:32
Оценка: 2 (1)
Здравствуйте, binks, Вы писали:

B>Почему так работает


Зачем Вы везде наставили двойных обратных слэшей?

B>а так нет


Потому, что cmd.exe, обнаружив открывающую кавычку, ищет парную, начиная с конца строки, в результате оставляя в строке только внутренние кавычки. Но зачем Вам вообще cmd.exe для запуска EXE-файла?

B>Как во втором варианте передать путь к файлу?


Если по каким-то религиозным причинам приспичило сделать это непременно через cmd.exe — удвоить первую и последнюю кавычку в строке.
Re[2]: cmd.exe экранирование символов
От: binks Россия  
Дата: 20.09.22 07:47
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Зачем Вы везде наставили двойных обратных слэшей?

По инерции.

ЕМ>Потому, что cmd.exe, обнаружив открывающую кавычку, ищет парную, начиная с конца строки, в результате оставляя в строке только внутренние кавычки.

Но оба варианта количеством кавычек не отличаются.

ЕМ>Но зачем Вам вообще cmd.exe для запуска EXE-файла?

Запускаю как CreateProcess. Хочу подобрать изменённый файл по окончания редактирования. Можно как-то иначе?

ЕМ>Если по каким-то религиозным причинам приспичило сделать это непременно через cmd.exe — удвоить первую и последнюю кавычку в строке.

Спасибо, так помогло.
Re[2]: cmd.exe экранирование символов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.09.22 07:55
Оценка: 2 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Потому, что cmd.exe, обнаружив открывающую кавычку, ищет парную, начиная с конца строки, в результате оставляя в строке только внутренние кавычки. Но зачем Вам вообще cmd.exe для запуска EXE-файла?


Совсем не факт. Скорее — ищет дубль кавычек. Вроде в паскале такая практика. В бат файлах обычно вроде тоже так.

ЕМ>Если по каким-то религиозным причинам приспичило сделать это непременно через cmd.exe — удвоить первую и последнюю кавычку в строке.


Фигню советуешь. Надо закавычить строки с пробелами, а строки, содержащие кавычки — там надо кавычки продублировать
Маньяк Робокряк колесит по городу
Re[3]: cmd.exe экранирование символов
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.22 09:07
Оценка:
Здравствуйте, Marty, Вы писали:

M>Надо закавычить строки с пробелами, а строки, содержащие кавычки — там надо кавычки продублировать


Ну так попробуйте сделать так именно при передаче командной строки cmd.exe, отпишитесь по результатам.
Re[3]: cmd.exe экранирование символов
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.22 09:09
Оценка:
Здравствуйте, binks, Вы писали:

B>Запускаю как CreateProcess.


Так и передавайте в CreateProcess непосредственно путь к EXE и его командную строку — хоть по отдельности, хоть вместе, согласно документации.
Re[4]: cmd.exe экранирование символов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.09.22 09:17
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

M>>Надо закавычить строки с пробелами, а строки, содержащие кавычки — там надо кавычки продублировать


ЕМ>Ну так попробуйте сделать так именно при передаче командной строки cmd.exe, отпишитесь по результатам.


Можно на "ты", это раз. Во-вторых — у меня куча своего софта, как парсящего параметры командной строки, так и генерирующего командную строку для вызова сторонних программ, и всё работает

ЗЫ Если тебе будет нечем заняться — попробуй вызвать свою прогу из командной строки с несколькими параметрами, каждый из которых содержит пробелы
Маньяк Робокряк колесит по городу
Re[5]: cmd.exe экранирование символов
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 20.09.22 09:36
Оценка:
Здравствуйте, Marty, Вы писали:

M>у меня куча своего софта


У меня тоже. Только какое это имеет отношение к "cmd /c"?

Таки предлагаю попробовать именно то, что делал ТС.
Re: cmd.exe экранирование символов
От: kov_serg Россия  
Дата: 20.09.22 09:49
Оценка:
Здравствуйте, binks, Вы писали:

B>Как во втором варианте передать путь к файлу?

Элементарно же
cmd /c ""C:\\Program Files (x86)\\Microsoft Office\\Office16\\WINWORD.EXE" "c:\\tmp\\docx_templates\\with space\\1.docx" /w /x"
Re[4]: cmd.exe экранирование символов
От: binks Россия  
Дата: 20.09.22 13:14
Оценка: +1 -1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Так и передавайте в CreateProcess непосредственно путь к EXE и его командную строку — хоть по отдельности, хоть вместе, согласно документации.

Переделал в таком виде. Я так изначально пробовал, но что-то пошло не так, видимо нужные аргументы не добавил.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.