Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 50

Запуск командной строки с параметрами (Лазраус)

28.10.2016, 23:32. Показов 6874. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые программисты!

В который раз прошу Вашей помощи. Пытаюсь запустить командную строку с параметрами. Выглядит это так,
Pascal
1
2
3
4
5
6
7
8
9
  Process1.Parameters.Add('@chcp 1251');
  Process1.Parameters.Add('@cls');
  Process1.Parameters.Add('@echo on&Title Командная строка ');
  Process1.Parameters.Add('@cls');
  Process1.Parameters.Add('@chcp 866');
  Process1.Parameters.Add('@cls');
  Process1.Parameters.Add('@call cmd.exe&/c');
  Process1.Parameters.Add('@pause');
  Process1.Active:=true;
Но к сожалению, она запускается без этих параметров. Подскажите пожалуйста, что я делаю не так и как это исправить.
Заранее благодарен!

Добавлено через 4 часа 34 минуты
Volvo аналогичный код выкладывал (Как из программы выполнять командные сценарии cmd.exe Windows (не через batch-файлы)?). Все работало, а у меня не работает.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.10.2016, 23:32
Ответы с готовыми решениями:

Запуск командной строки с параметрами
Есть командная строка и ее надо запустить, делаю как обычно System.Diagnostics.Process.Start("C:\Temp\Some.exe"); ...

Запуск с несколькими параметрами командной строки
У меня консольное приложение,в нём несколько параметров командной строки (case "1",case "2" и.т.д.) Как мне запустить...

Запуск программы с параметрами с командной строки
Добрый день. Хочу решить простую задачу. Пользователь должен запустить программу с параметрами с консоли. Параметров может быть 2 или 3....

9
Джоуи
 Аватар для Joey
1083 / 645 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
29.10.2016, 10:49
lapvd, а в Process1.Executable что стоит? "cmd"?

Добавлено через 6 минут
Цитата Сообщение от lapvd Посмотреть сообщение
Volvo аналогичный код выкладывал
Отнюдь! В ПЕРВУЮ ОЧЕРЕДЬ надо добавить
Delphi
1
process1.Parameters.Add('/c');
, как и показывал volvo. Параметр /c позволяет командной строке воспринять все, что дальше, как команды на выполнение.
Не путайте понятия параметр и команды. То, что Вы передаете через Parameters.Add - это параметры, передаваемые в запускаемую программу, а вот это все
Windows Batch file
1
2
3
4
5
6
7
8
@chcp 1251
@cls
@echo on&Title Командная строка 
@cls
@chcp 866
@cls
@call cmd.exe&/c
@pause
собственные, внутренние команды cmd, и то, что показал volvo - способ запуска cmd и передачи команд ей на выполнение

Добавлено через 1 минуту
Лучше перечитайте тот пост полностью, там вроде все подробно описано
1
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 50
29.10.2016, 12:21  [ТС]
Да нет, "/c" - это как раз параметр командной строки Windows 7 и означает он "Выполнение указанной команды (строки) с последующим завершением" (http://ab57.ru/cmdlist/cmd.html). Я перепробовал множество вариантов, вставлял cmd в CommandLine и Executable - результат один. Как Вы поняли CMD запускается, но "она запускается без этих параметров". Пример Volvo у меня работает превосходно. Мой код в Бат файле тоже. В чем может быть проблема мне не понятно. Как, например, изменить заголовок окна CMD.EXE
Bash
1
'@echo on&Title Командная строка '
и кодировку
Bash
1
'@chcp 866'
??

Добавлено через 4 минуты
Почему например,
Bash
1
2
3
4
5
6
7
8
9
10
  process1:= TProcess.Create(nil);
  process1.Executable := 'cmd';
  process1.Parameters.Add('/K');
  Process1.Parameters.Add('@chcp 866');
  Process1.Parameters.Add('@cls');
  process1.Parameters.Add('@echo on&Title Командная строка ');
  Process1.Parameters.Add('@pause');
  process1.Options := [poWaitOnExit];
  process1.Execute;
  process1.Free;
работает, но совершенно не так, как надо. Кодировка не изменилась, пауза вылезла аж в заголовок?

Добавлено через 21 минуту
Сразу скажу, что с кодировкой chcp 1251 тоже самое...
0
Джоуи
 Аватар для Joey
1083 / 645 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
29.10.2016, 12:45
lapvd, во-первых, почему
Цитата Сообщение от lapvd Посмотреть сообщение
process1.Parameters.Add('/K');
, '/c' же. Или это что-то другое?
Во-вторых, Parameters.Add добавляет всё через пробел (поэтому, например, @pause оказалось в заголовке, потому что фактически в cmd передалась строка "@echo on&Title Командная строка @pause")
Вам надо все нужные команды добавить за один раз, разделяя их с помощью &
Delphi
1
2
3
4
5
6
7
process1:= TProcess.Create(nil);
  process1.Executable := 'cmd';
  process1.Parameters.Add('/c');
  Process1.Parameters.Add('@chcp 866&@cls&@echo on&Title Командная строка&@pause');
  process1.Options := [poWaitOnExit];
  process1.Execute;
  process1.Free;
Говорю же, перечитайте тему

Добавлено через 3 минуты
Для командной строки это будет выглядеть так:
cmd /c @chcp 866&@cls&@echo on&Title Командная строка&@pause
То есть синтаксис такой - запускаемая_программа + пробел и аргумент №1 /c + пробел и аргумент №2 (ВСЕ команды на выполнение для командной строки). Я довольно подробно изучил эту задачу, но вот насчет кириллицы в командной строке - это отдельная сложная тема, почитайте:
https://www.cyberforum.ru/post3644494.html
Русский текст в консоли
Русский язык в командной строке

Если лень все читать, прочитайте вот эту тему Русский текст в консоли пункт 2а

lapvd, при возникновении проблем вместо одного амперсанда & можно попробовать два &&, не знаю, отчего зависит их поведение, в официальной документации советуют ставить два, но на деле обычно работает только с одним

Забыл, всю строку @chcp 866&@cls&@echo on&Title Командная строка&@pause, по-моему, надо взять в двойные кавычки:
Delphi
1
Process1.Parameters.Add('"@chcp 866&@cls&@echo on&Title Командная строка&@pause"');
1
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 50
29.10.2016, 13:12  [ТС]
Если будет "/c", то консоль сразу закроется. Думаю это не принципиально. Если сделать батник и прописать туда
Bash
1
2
3
4
5
6
7
8
@chcp 1251
@cls
@echo on&Title Командная строка 
@cls
@chcp 866
@cls
@call cmd.exe&/c
@pause
, то с кириллицей все будет нормально. В заголовке будет "Администратор: Командная строка" (chcp 1251), а в тексте будет уже chcp 866. Когда же я пытаюсь сделать тоже самое в Лазарусе, заголовок консоли выглядит так "Администратор: PльPsPjP....".

Добавлено через 10 минут
В батнике вообще нет "/c" или "/K", а все работает.
1
Джоуи
 Аватар для Joey
1083 / 645 / 240
Регистрация: 05.05.2015
Сообщений: 3,559
Записей в блоге: 2
29.10.2016, 13:20
Цитата Сообщение от lapvd Посмотреть сообщение
Если будет "/c", то консоль сразу закроется
точно, не знал
Цитата Сообщение от lapvd Посмотреть сообщение
Когда же я пытаюсь сделать тоже самое в Лазарусе
В Лазарус юникодные строки, наверное, дело в этом

Добавлено через 33 секунды
Цитата Сообщение от lapvd Посмотреть сообщение
В батнике вообще нет "/c" или "/K",
а зачем они в батнике? не нужны
1
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 50
29.10.2016, 14:23  [ТС]
Если есть что-то типа паузы, то консоль не закроется и при параметре "/c". Но, если у Вас не работает ничего, кроме параметра "/c", то консоль закроется. Я так понимаю с этими юникодными строками уже ничего наверное и не сделать? Вы не поверите, но у меня в Лазарусе все время все по разному. Копирую рабочий код, вставляю в другое место и все опять как было. По крайней мере другие команды заработали, за что я Вам очень благодарен. Спасибо Вам большое!
0
29.10.2016, 19:46

Не по теме:

Цитата Сообщение от lapvd Посмотреть сообщение
Я так понимаю с этими юникодными строками уже ничего наверное и не сделать?
Я попробовал разные методы, у меня не получилось. Вся надежда на volvo, если он сюда зайдет.

0
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 50
29.10.2016, 20:41  [ТС]
Давно от него вестей не было. Очень многим ему обязан. Жаль, если он покинул проект. У меня есть exe (как раз с вышеуказанным кодом), который я собрал в Лазарусе и он абсолютно правильно работает, но только в той папке, где он находится. Когда я его от туда извлекаю, то он выдает кракозябры. Мне интересно, только у меня все так глючно? Бывает работаешь, работаешь, а потом тебе говорят, что твой файл не похож на lpk и т.д.
0
29.10.2016, 20:49

Не по теме:

Цитата Сообщение от lapvd Посмотреть сообщение
Жаль, если он покинул проект
нет, конечно

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.10.2016, 20:49
Помогаю со студенческими работами здесь

Запуск графической программы с параметрами из командной строки
Пишу примитивный нотифер, нужно что бы через консоль можно было передавать текст в label и listbox. И почему-то не работает анимация...

Работа с параметрами командной строки
Помогите создать пример, выводящий на экран, все параметры командной строки 3-мя способами, используя разные управляющие конструкции ....

Создать программу, работающую с параметрами командной строки
Написать программу, которая должна принимать только параметры командной строки. Содержать справку. * Программа может принимать...

Запуск С Командной Строки
с виндяткой ситуация достаточно обсосана с линухами - все печальней (в смысле адекватной инфы от вендора) гугл нам в помощь...

Запуск командной строки из консоли
Доброго времени суток! Подскажите пожалуйста, как можно запустить командную строку и вписать в неё нужные аргументы и выполнить их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru