Latest post of the previous page:
Увы. Эксперименты показали, что для CMD кавычки лучше оставить. Перенаправление, пайпы, всё это нормально работает до тех пор, пока в пути к командному файлу не втретится пробел (т.е. кавычки будут первым символом). Тут cmd лажаетсяНе заключать командную строку в кавычки
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Не заключать командную строку в кавычки
Провёл небольшое сравнения поведения cmd и tcc
Для, примера, есть строка типа test.cmd " " " 2" 3
(командный файл только выводит переданные ему параметры)
Возможны случаи:
- Полный путь содержит пробелы или нет (или др. спецсимволы)
- Передаваемый полный путь заключён в кавычки или нет (независимо от того, есть ли пробелы)
- Всё вышеперечисленное может быть заключено в кавычки или нет.
Получается 8 комбинаций. Две из них заведомо неверные (путь содержит пробелы и не заключён в кавычки). Из оставшихся шести одинаковые результаты только в двух случаях
Но результаты всегда совпадают, если строку для cmd заключать в кавычки (как сейчас), а для tcc никогда не заключать.
Получается, различать их можно только по имени exe-файла из %comspec%.
Для, примера, есть строка типа test.cmd " " " 2" 3
(командный файл только выводит переданные ему параметры)
Возможны случаи:
- Полный путь содержит пробелы или нет (или др. спецсимволы)
- Передаваемый полный путь заключён в кавычки или нет (независимо от того, есть ли пробелы)
- Всё вышеперечисленное может быть заключено в кавычки или нет.
Получается 8 комбинаций. Две из них заведомо неверные (путь содержит пробелы и не заключён в кавычки). Из оставшихся шести одинаковые результаты только в двух случаях
Но результаты всегда совпадают, если строку для cmd заключать в кавычки (как сейчас), а для tcc никогда не заключать.
Получается, различать их можно только по имени exe-файла из %comspec%.
Разум когда-нибудь победит.
Re: Не заключать командную строку в кавычки
Мне кажется правильнее всего было бы ввести настройку "Quote Execuatable Paths" или как там больше нравится со значением 0/1 (если она ещё не введена), а если кто-то поставил себе оригинальный шелл, то он всегда может эту настройку поменять макросом, выполняющимся при старте фара, который решит в зависимости от COMSPEC и фазы луны, какая настройка ему больше нужна
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Не заключать командную строку в кавычки
Использозование ФАРа под "разными" шеллами показало, что самый лучший способ определить, под чем работаем, это посмотреть имя файла в %comspec%. Тестовая пересобранная версия (на текущий момент 3443) работает нормально, предыдущие тоже. Определение шелла сделано примитивно, простым сравнением, но работает.2useven10 wrote:достаточно ...NotQuotedShell -- список или regex, по-умолчанию пусто.
Переформулируя предложение - добавить настройку, отключающую фичу "заключить всё в кавычки", если имя текущего командного процессора есть в списке, допустим, System.Executor.NotQuotedShell
Попутно возникающее несоответствие System.Executor.BatchType и System.Executor.ExcludeCmds для разных командных процессоров можно решить через переменные среды (если раскрывать их при чтении этих параметров).
Разум когда-нибудь победит.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Не заключать командную строку в кавычки
Пример:t-rex wrote:только текущий вариант нормально работает.
Code: Select all
(echo Hello&echo World)| msg *
Строка параметров ComSpecParams, передаваемая CMD выглядит как
Code: Select all
/C ""(echo" Hello& echo World)| msg *"
Это я к тому, что "executor" в ФАРе всё-таки не идеальный.
Разум когда-нибудь победит.
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Не заключать командную строку в кавычки
Вариант решения сабжа:
- Добавляется строковая опция System.Executor.NotQuotedShell содержащая имена командных процессоров, для которых командную строку не надо заключать в кавычки. По умолчанию TCC.EXE;TCCLE.EXE. Можно использовать переменные среды (на всякий случай). Регулярные выражения сдесь, я думаю, лишние.
- Параметры System.Executor.BatchType и System.Executor.ExcludeCmds могут содержать переменные среды (для возможности гибкой настройки при запуске из-под разных КП).
- При запуске проверяем текущий %comspec% - если exe-файл есть в списке NotQuotedShell, в кавычки не заключаем.
- Добавляется строковая опция System.Executor.NotQuotedShell содержащая имена командных процессоров, для которых командную строку не надо заключать в кавычки. По умолчанию TCC.EXE;TCCLE.EXE. Можно использовать переменные среды (на всякий случай). Регулярные выражения сдесь, я думаю, лишние.
- Параметры System.Executor.BatchType и System.Executor.ExcludeCmds могут содержать переменные среды (для возможности гибкой настройки при запуске из-под разных КП).
- При запуске проверяем текущий %comspec% - если exe-файл есть в списке NotQuotedShell, в кавычки не заключаем.
- Attachments
-
- executor.7z
- diff
- (1.19 KiB) Downloaded 118 times
Разум когда-нибудь победит.
Не заключать командную строку в кавычки
После очередного обновления FAR перестал понимать имя файла с пробелами, получаемое им по Ctrl-Enter в командую строку (т. е. раньше я встал курсором на Word'овский документ с длинным именем, нажал Ctrl-Enter и Enter, документ открылся). Теперь пишет: <Первое слово из имени файла> не является внутренней или внешней командой блабла
Как победить?
И второй вопрос: что и где отключить для того, чтобы FAR не заходил по Enter внутрь документа, а просто открывал Word?
Как победить?
И второй вопрос: что и где отключить для того, чтобы FAR не заходил по Enter внутрь документа, а просто открывал Word?
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Не заключать командную строку в кавычки
@PZM
Темой вы ошиблись, и даже подфорумом, ведь здесь обсуждаются Предложения и идеи, тогда как вам надо в Нужна помощь.
Если да, то не воспроизводится, и вам сюда: http://forum.farmanager.com/viewtopic.php?f=9&t=16
На будущее: разнородные вопросы не стоит смешивать в кучу, не говоря уже о том, что ответы на них возможно давались, и могут быть найдены поиском.
Темой вы ошиблись, и даже подфорумом, ведь здесь обсуждаются Предложения и идеи, тогда как вам надо в Нужна помощь.
Возможно имеется ввиду, что Ctrl-Enter перестал окавычивать такие имена.
Если да, то не воспроизводится, и вам сюда: http://forum.farmanager.com/viewtopic.php?f=9&t=16
При отсутствии кавычек так было всегда.
Например откройте настройки плагина arclite.
На будущее: разнородные вопросы не стоит смешивать в кучу, не говоря уже о том, что ответы на них возможно давались, и могут быть найдены поиском.