Имя: Пароль:
1C
1C 7.7
v7: Экранирование кавычек
,
0 extrim-style
 
19.04.16
15:37
Подскажите, как экранировать кавычки для КомандаСистемы?

Так работает:
КомандаСистемы("""C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe"" ENTERPRISE /F G:\ПутьКБазе /RunModeManagedApplication /Execute G:\ПутьКБазе\Обработка.epf");

Добавляю параметр /C - не работает:
КомандаСистемы("""C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe"" ENTERPRISE /F G:\ПутьКБазе /RunModeManagedApplication /Execute G:\ПутьКБазе\Обработка.epf /C""Параметр""");
1 extrim-style
 
19.04.16
15:43
Сделал через ЗапуститьПриложение. Но (0) всё-равно интересует.
2 extrim-style
 
19.04.16
15:44
+(1) ЗапуститьПриложение не подходит, т.к. не ожидает завершения, поэтому вопрос в (0) всё также актуален.
3 Fedor-1971
 
19.04.16
15:44
/C""Параметр"" - чему будет равен?
4 extrim-style
 
19.04.16
15:45
(3) я не знаю. Как посмотреть? Pause не получается сделать. Окно закрывается.
5 Fedor-1971
 
19.04.16
15:46
запусти CMD и в него впиши строку с неэкранированными кавычками
6 extrim-style
 
19.04.16
15:46
(3) В параметре хочу передать экранированную строку - "Любой Текст".
7 extrim-style
 
19.04.16
15:48
(5) в случае КомандаСистемы в CMD попадает уже интерпретированная версия (две кавычки в одну). А как он её интерпретирует, у меня не получается посмотреть. А в исходной строке я ошибок не нахожу.
8 extrim-style
 
19.04.16
15:51
(5) такая строка в CMD отрабатывает нормально:
"C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe" ENTERPRISE /F G:\ПутьКБазе /RunModeManagedApplication /Execute G:\ПутьКБазе\Обработка.epf /C"Параметр"

Мне её нужно правильно в КомандуСистемы вставить.
9 mingw
 
19.04.16
15:56
Пути возьми тоже в кавычки.
10 extrim-style
 
19.04.16
15:59
(9) не помогло
11 mingw
 
19.04.16
16:00
Сделай
СтрокаЗапуска = "...";
Сообщить(СтрокаЗапуска);
12 Ёпрст
 
19.04.16
16:02
(0)

КомандаСистемы(""""C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe""" ENTERPRISE /F G:\ПутьКБазе /RunModeManagedApplication /Execute G:\ПутьКБазе\Обработка.epf /C"""Параметр"""")
13 mingw
 
19.04.16
16:04
(12) Точно же. Вспомнил эту фишку в 8ке с тройными кавычками. Давно не пользовался КомандаСистемы. Лет 5 уже.
14 sitex
 
naïve
19.04.16
16:07
Да можно еще: Сообщить (""++Символ(34)+"")поизвращается
15 Chainsaw
 
19.04.16
16:09
(13) какие тройные, пациент?
Берем правильно расставленные кавычки из строки для cmd. По правилам синтаксиса 1С удваиваем их, чтобы поместить в строку. Добавляем слева и справа ограничивающие строку. Вставляем в вызов функции.
16 Смотрящий
 
19.04.16
16:09
/C""" + Параметр + """");
17 mingw
 
19.04.16
16:10
(15) 1cv8.exe""" ENTERPRISE
18 Chainsaw
 
19.04.16
16:12
(17) всю строку показывай
19 extrim-style
 
19.04.16
16:16
(12)(16) вроде бы не помогло, сейчас перепроверю
20 mingw
 
19.04.16
16:16
(18) см. (12)
21 extrim-style
 
19.04.16
16:23
(11) делаю
СтрокаЗапуска="""C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe"" ENTERPRISE /F G:\ПутьКБазе /RunModeManagedApplication /Execute G:\ПутьКБазе\Обработка.epf /C""Параметр""";
Сообщить(СтрокаЗапуска);

Копирую строку из окна сообщений, вставляю в CMD - отрабатывает нормально.
22 extrim-style
 
19.04.16
16:27
(12) 4 3 3 4 кавычки - не работает, даже код нормально не сохраняется
23 sitex
 
naïve
19.04.16
16:29
(22) см. (16)
24 extrim-style
 
19.04.16
16:32
(23)(16) такой код сохраняется с ошибками в 1С
25 mingw
 
19.04.16
16:33
(21) Паришь с кавычками. Не в тех местах. И что такое "Параметр"?
"G:\ПутьКБазе\Обработка.epf" - каждый отдельный путь. В котором длинные и(или) русские имена. Лучше в кавычки.
26 sitex
 
naïve
19.04.16
16:37
Параметр ="Гыыыы";
СтрокаЗапуска= """C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe"" ENTERPRISE /F G:\ПутьКБазе /RunModeManagedApplication /Execute G:\ПутьКБазе\Обработка.epf /C  "+ Параметр+"";
27 romix
 
19.04.16
16:37
Чтобы не путаться, можно СтрЗаменить

СтрокаЗапуска="{{ПУТЬК1С}} ENTERPRISE /F{{ПутьКБазе}} /RunModeManagedApplication /Execute {{Обработка}} /C{{Параметры}}";

СтрЗаменить(СтрокаЗапуска, "{{ПУТЬК1С}}", """C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe""");
....
28 solarcold
 
19.04.16
16:39
Был бы я Богом Программирования - создал бы такие штуки, как "технические кавычки" и "технические слеши", и прочие, чтобы они использовались исключительно в коде и никогда в тексте, и не было геморроя с их использованием.
29 extrim-style
 
19.04.16
16:40
(26) спасибо, помогло. А одной строкой можно?
30 mingw
 
19.04.16
16:40
(28) \" и \\
31 singlych
 
19.04.16
16:43
Зато так веселей.
"ВЫБРАТЬ """""""" КАК Кавычка"
32 extrim-style
 
19.04.16
16:45
+(26)(29) нет, это не то, что мне нужно, т.к. не экранировано /c"Параметр"
33 extrim-style
 
19.04.16
16:46
+(32) запутался вконец...
34 Карупян
 
19.04.16
16:47
лучше писть одинаные кавычки, а потом заменть ' на " "
35 extrim-style
 
19.04.16
16:48
+(26) нет, это не подходит, т.к. мне нужно в твоём случае:
Параметр = """Гыыыы""";
но так не работает
36 extrim-style
 
19.04.16
16:49
(27) я не хочу путаться, я хочу разобраться
37 extrim-style
 
19.04.16
16:49
может кто-нибудь подскажет, как мне окно cmd оставить на экране, чтобы посмотреть на результат транслирования?
38 Карупян
 
19.04.16
16:49
(36) ОДинарная кавычка заменяется на двойную + открывающая и закрывающая кавычки
39 Карупян
 
19.04.16
16:50
(37) в файл запиши или сообщить
40 sitex
 
naïve
19.04.16
16:50
pause в  cmd
41 extrim-style
 
19.04.16
16:51
(38) в (0) разве не так?
42 Карупян
 
19.04.16
16:54
или в отладчике можно посмотреть строки.
А может у тебя /с не того алфавита?
43 extrim-style
 
19.04.16
16:56
(40) КомандаСистемы("""C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe"" ENTERPRISE /F G:\ПутьКБазе /RunModeManagedApplication /Execute G:\ПутьКБазе\Обработка.epf /C""Параметр""" pause);

cmd-окно появляется и исчезает
44 extrim-style
 
19.04.16
16:57
(39) КомандаСистемы("""C:\Program Files (x86)\1cv82\8.2.19.106\bin\1cv8.exe"" ENTERPRISE /F G:\ПутьКБазе /RunModeManagedApplication /Execute G:\ПутьКБазе\Обработка.epf /C""Параметр""" >>D:\1.txt);

получаю пустой документ
45 extrim-style
 
19.04.16
16:58
(42) в (21) работает, а этот же код в КомандаСистемы не работает
46 Chainsaw
 
19.04.16
17:00
(23) Короче. Сподвигли меня на эксперимент, блин.

При запуске через КомандаСистемы, 1С  зовет командный интерпретатор и тупо отдает ему строку параметром /c
То есть из строки
КомандаСистемы("""C:\Program Files (x86)\1cv8\8.3.7.1759\bin\1cv8.exe"" ENTERPRISE /RunModeManagedApplication /F D:\ERP20");

Получается вменяемое и запускаемое
cmd.exe /c "C:\Program Files (x86)\1cv8\8.3.7.1759\bin\1cv8.exe" ENTERPRISE /RunModeManagedApplication /F D:\ERP20

Если взять значение параметра D:\ERP20 в кавычки, то башню сносит именно cmd.exe на определение параметров, что к чему относится. Он решает не рисковать и падает с ошибкой типа "C:\Program" не является внутренней или внешней командой, исполняемой программой или пакетным файлом."

Правильный путь решения - добавить еще две ограничивающие кавычки для cmd:

cmd.exe /c " "C:\Program Files (x86)\1cv8\8.3.7.1759\bin\1cv8.exe" ENTERPRISE /RunModeManagedApplication /F "D:\ERP20" "

Или аналогично для 1С
КомандаСистемы(" "" ""C:\Program Files (x86)\1cv8\8.3.7.1759\bin\1cv8.exe"" ENTERPRISE /RunModeManagedApplication /F ""D:\ERP20"" "" ");

Пробелы специально поставил, чтобы про тройные кавычки не трындели. Консалтеров развелось.
47 sitex
 
naïve
19.04.16
17:01
Вообще работает КомандаСистемы ("PAUSE 100");
48 sitex
 
naïve
19.04.16
17:02
(46)  :)
49 mingw
 
19.04.16
17:05
(46) Не смог 3-мя кавычками? Только 5-ю сумел? ;)
50 Chainsaw
 
19.04.16
17:08
(49) так даже надежней :)
оно у тебя 5 лет назад тупо без параметров запускалось. Ты брал в кавычки путь к исполняемому файлу, а остальное милостью гейтса и нуралиева проскакивало
51 mingw
 
19.04.16
17:10
(50) Проще файл .bat/cmd записать. И выполнить.
52 sitex
 
naïve
19.04.16
17:12
(51) ага ;) тогда уж лучше создавать текст в 1С,которая потом создасть файл bat и потом его выполнит :-)
53 Chainsaw
 
19.04.16
17:16
(51) как сильно частное решение
В нищих конторах, которые дают заказы на написание своего софта, можно запросто нарваться на линуксовый тазик с /tmp смонтированным с noexec. Потому что админы.
54 Йохохо
 
19.04.16
17:32
(53) читай вывод aa-status и парси
55 Chainsaw
 
19.04.16
17:53
(54) чтобы просто запустить команду на выполнение которой у меня гарантировано есть права? Вы всегда так делаете? А зачем?
56 Йохохо
 
19.04.16
18:12
шутка была. Не шутка только в планах чрез пару месяцев
57 extrim-style
 
20.04.16
09:20
(46) спасибо, помогло.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс