|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Передача параметра из Delphi в CMD с помощью WinExec
Есть обработчик события:
Код:
procedure TForm1.Button6Click(Sender: TObject); begin WinExec('cmd.exe /c "echo PNR && ping -t google.ru" ', SW_SHOW) end; P.S. К примеру, я получаю в поле Memo путь к какому-то каталогу, далее этот путь записываю в некую переменную и эту переменную вывожу через командную строку с помощью ECHO. Буду ОЧЕНЬ признателен за помощь. Варианты с ShellExecute и CreateProcess не предлагать, так как такая сложность не требуется. |
#2
|
|||
|
|||
Либо я чего-то не понимаю, либо как-то так:
Код:
procedure TForm1.Button6Click(Sender: TObject); begin WinExec(Format('cmd.exe /c "echo %s" ',[memo1.lines.text]), SW_SHOW); end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
ffpereverzev (15.02.2017)
|
#3
|
||||
|
||||
Цитата:
Спасибо большое за ответ! Не сработало. При компиляции вот такие ошибки: Код:
[Error] Unit1.pas(89): Incompatible types: 'String' and 'PAnsiChar' [Fatal Error] MegaPROG.dpr(5): Could not compile used unit 'Unit1.pas' |
#4
|
||||
|
||||
Цитата:
Код:
WinExec(PAnsiChar(Format('cmd.exe... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
ffpereverzev (15.02.2017)
|
#5
|
||||
|
||||
Всем огромное спасибо!
Спасибо большое за Ваши отклики!
После многочасовых ковыряний с WinExec все таки пришлось обратиться к ShellExecute и, в итоге, вот, что получилось. Код:
procedure TForm1.Button6Click(Sender: TObject); Var Log_f :string; //Переменная для хранения пути к лог-файлу Log_b :string; //Переменная для хранения лог-файла бэкапа Bck_f :string; //Переменная для хранения пути к каталогу бэкапов Prj_d :string; //Переменная для хранения пути к каталогу проекта Pnr_f :string; //Переменная для хранения пути к файлу ПНР par:string; // Переменная, для передачи параметров в командную строку begin Log_f := Log_file.Text; //Считываем текст из окна Log_file Log_b := Log_backup.Text; //Считываем текст из окна Log_backup Bck_f := Backup_file.Text; //Считываем текст из окна Backup_file Prj_d := Project.Text; //Считываем текст из окна Project Pnr_f := PNR_file.Text; //Считываем текст из окна PNR_file par:='/K c:\"Program Files"\WinRAR\Rar.exe a -agDDMMYYYY_HHMM -ep1 -m3 -ow -rr100 -inul -t -ilog'+'"'+Log_f +'" -z"'+Pnr_f +'" "'+Bck_f +'" "'+Prj_d +'"'; // Описываем параметры ShellExecute(Handle, nil, 'cmd.exe', PChar(par), nil, SW_SHOW); //Выполняем необходимую операцию (архивирование) end; Только обнаружился интересная ошибка. Почему-то при архивировании, каталог для файла бэкапа получился "плавающий", то есть архив сохраняется в разные папки рандомным образом. Пока разбираюсь из-за чего это может быть. |
#6
|
||||
|
||||
Всем огромное спасибо!
Проблема решена. Моя ошибка была в том, что при переносе кода для архивирования из бат-файла я не учел некоторые особенности. В итоге, получился отличный рабочий код:
Код:
procedure TForm1.Button6Click(Sender: TObject); Var Log_f :string; //Переменная для хранения пути к лог-файлу Bck_f :string; //Переменная для хранения пути к каталогу бэкапов Prj_d :string; //Переменная для хранения пути к каталогу проекта Pnr_f :string; //Переменная для хранения пути к файлу ПНР par:string; // Переменная, для передачи параметров в командную строку begin Log_f := Log_file.Text; //Считываем текст из окна Log_file Bck_f := Backup_file.Text; //Считываем текст из окна Backup_file Prj_d := Project.Text; //Считываем текст из окна Project Pnr_f := PNR_file.Text; //Считываем текст из окна PNR_file par:='/C "C:\Program Files\WinRAR\Rar.exe" a -agProject_DDMMYYYY_HHMM -ep1 -idc -ilog'+Log_f +' -t '+Bck_f +' '+Prj_d +' -z'+Pnr_f; // Описываем параметры ShellExecute(Handle, nil, 'cmd.exe', PChar(par), nil, SW_SHOW); //Выполняем необходимую операцию (архивирование) end; |