|
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) спасибо, помогло.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |