Форум: "Начинающим";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];
Внизсоздание переменных в cmd Найти похожие ветки
← →
antonn © (2008-12-27 13:30) [0]Сформулировать не могу, задача такая: вызывается 1.bat, в нем запускается мое консольное приложение, после его отработки в "переменых" 1.bat должны появиться переменные созданые моей консолькой.
Т.е. в батнике переменная создается так:SET TEMP_VAR=123456
echo %TEMP_VAR%
моя консоль отрабатывая в контексте этого батника сама инициализоровать эти переменные (либо если они уже есть - переделать), т.е. теперь батник будет выглядеть так:mycmd.exe
echo %TEMP_VAR%
Как вот это действие называется, что искать? Пересмотрел кучу примеров и статей, везде консолька раскрашивается и ставятся обработчики всякие (искал по "вывод из консоли").
← →
sniknik © (2008-12-27 14:37) [1]если дело только в одной переменной то проще использовать код возврата программы... его в батнике можно "видеть" без дополнительных ухищрений.
← →
antonn © (2008-12-27 14:47) [2]нет, их много (ну штук 40-50), они специфические (батник для упрощения некоторых операций (и быстрой правки их очередности и добавления), а вот переменные (от путей до файлов до флагов) формируются моей программкой). Да и дело в том, что вызвав такую программу во втором/третьем батнике в каждом я быстро и удобно получаю свои "переменные окружения". Был вариант сохранять в файл и уже в самом батнике считывать его (пример на rsdn есть), но очень вероятно, что доступа на запись не будет :)
вообще, можно ли как то в контексте cmd, запустившего мою программу, выполнить код (проще говоря кусок текста формируемый моей консольной программой выполнить в самом cmd после возврата управления ему)?
← →
antonn © (2008-12-27 14:47) [3]
> Был вариант сохранять в файл и уже в самом батнике считывать
> его (пример на rsdn есть), но очень вероятно, что доступа
> на запись не будет :)
да и на костыль сильно смахивает :)
← →
sniknik © (2008-12-27 15:40) [4]> проще говоря кусок текста формируемый моей консольной программой выполнить в самом cmd после возврата управления ему
ну так... батник это же текстовый файл, исправь его, и по идее что дописано должно выполнится.
← →
Anatoly Podgoretsky © (2008-12-27 15:41) [5]> antonn (27.12.2008 14:47:02) [2]
свести три батника к одному.
← →
antonn © (2008-12-27 15:56) [6]
> sniknik © (27.12.08 15:40) [4]
считаем, что доступа на запись нет.
Меня лишь интересует, можно ли вернуть текст который будет "выполнен" той копии cmd, что запустила моя программа.
> Anatoly Podgoretsky © (27.12.08 15:41) [5]
неправильно, я задал другой вопрос.
← →
Ляпа (2008-12-27 18:39) [7]http://forum.farmanager.com/viewtopic.php?t=260
?
← →
antonn © (2008-12-27 18:54) [8]
> Ляпа (27.12.08 18:39) [7]
да, вот что то этого мне и нужно, на дельфи, желательно постандартней без всяких InjectMemory (в идеале конечно хотелось бы отдать кусок текста на выполнение).
← →
Ляпа (2008-12-27 19:10) [9]ShellExecute(0,nil, Pchar("SETENV.exe"), Pchar("TEMP_VAR=TEST_SETENV /PARENTS 2 /IM cmd.exe"), nil, 0);
← →
antonn © (2008-12-27 19:45) [10]
> Ляпа (27.12.08 19:10) [9]
[2]
← →
Ляпа (2008-12-28 08:02) [11]
> желательно постандартней без всяких InjectMemory
Сомневаюсь, что можно стандартными способами менять переменные окружения родительского процесса.
> на дельфи
Портируй. В чём проблемы?
← →
Leonid Troyanovsky © (2008-12-28 11:00) [12]
> antonn © (27.12.08 14:47) [2]
http://groups.google.com/group/fido7.ru.delphi.chainik/browse_thread/thread/ad6df8e4a327fbb8/105efa8d48c49726#105efa8d48c49726
Во-ще-то, для таких вещей пользуют vbscript.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-12-28 11:03) [13]
> antonn © (27.12.08 18:54) [8]
> хотелось бы отдать кусок текста на выполнение).
Пусти telnet service и напиши своего клиента к нему.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-12-28 11:14) [14]
> antonn © (27.12.08 15:56) [6]
> Меня лишь интересует, можно ли вернуть текст который будет
> "выполнен" той копии cmd,
program setenvvar2;
uses
Windows,
Messages,
SysUtils;
{$APPTYPE CONSOLE}
const
s : String = "set x=y"#13;
var
h: HWND;
i : Longint;
begin
h := FindWindow("ConsoleWindowClass", nil);
for i := 1 to Length(s) do
PostMessage(h, WM_CHAR, WParam(s[i]), 0);
end.
--
Regards, LVT.
← →
Ляпа (2008-12-28 11:30) [15]
> Leonid Troyanovsky © (28.12.08 11:14) [14]
А что будет, если есть несколько таких окон?
← →
Leonid Troyanovsky © (2008-12-28 12:12) [16]
> Ляпа (28.12.08 11:30) [15]
> А что будет, если есть несколько таких окон?
Окну присваивается уникальное имя путем SetConsoleTitle,
это имя и используется для поиска.
--
Regards, LVT.
← →
antonn © (2008-12-28 12:54) [17]
> Leonid Troyanovsky © (28.12.08 11:14) [14]
спасибо, попробую (vbs не пашет :))
← →
antonn © (2008-12-28 12:59) [18]
>
> Окну присваивается уникальное имя путем SetConsoleTitle,
>
в самом батнике это возможно?
← →
Leonid Troyanovsky © (2008-12-28 13:03) [19]
> antonn © (28.12.08 12:59) [18]
> > Окну присваивается уникальное имя путем SetConsoleTitle,
> в самом батнике это возможно?
Можно и в батнике - TITLE, IMHO.
Только где ты там возьмешь уникальное имя?
--
Regards, LVT.
← →
sniknik © (2008-12-28 13:06) [20]> vbs не пашет :)
да ну?
положи в файл с названием Hello.vbs следующую строчкуWScript.Echo "Hello Word!"
и выполни (в проводнике двойной клик мыши). а то ты его из "dos-а" наверно проверял...
← →
antonn © (2008-12-28 13:13) [21]
> Только где ты там возьмешь уникальное имя?
ну в теории можно загнять туда время :)
← →
Leonid Troyanovsky © (2008-12-28 13:17) [22]
> antonn © (28.12.08 13:13) [21]
> ну в теории можно загнять туда время :)
Уж лучше параметром передавать, от юзера.
--
Regards, LVT.
← →
antonn © (2008-12-28 13:25) [23]
> Leonid Troyanovsky © (28.12.08 13:17) [22]
так батник вызывает меня (причем один и от же, но может быть в нескольких экземплярах), а я не я батник, поэтому вероятней батник вернет мне параметром его заголовок. По идее в cmd должен быть какой нибудь random() (ну я бы сделал, пойду проверю), чтобы соли в заголовок добавить.
← →
Leonid Troyanovsky © (2008-12-28 13:31) [24]
> antonn © (28.12.08 13:25) [23]
> так батник вызывает меня (причем один и от же, но может
> быть в нескольких экземплярах), а я не я батник, поэтому
> вероятней батник вернет мне параметром его заголовок.
Пускаешь его с параметром, в нем
title %1
exe.exe "%1"
--
Regards, LVT.
← →
antonn © (2008-12-28 13:32) [25]
> Пускаешь его с параметром, в нем
да запускаю не я, мое дело вернуть в него мою прогу и обеспечить поручение результата после ее отработки. Т.е. диктовать как ее запускать я не могу.
← →
Leonid Troyanovsky © (2008-12-28 13:39) [26]
> antonn © (28.12.08 13:32) [25]
> да запускаю не я, мое дело вернуть в него мою прогу и обеспечить
> поручение результата после ее отработки. Т.е. диктовать
> как ее запускать я не могу.
Тогда меняй заголовок из своей программы,
а по окончанию - вернешь на место старый.
--
Regards, LVT.
← →
antonn © (2008-12-28 13:43) [27]
> Тогда меняй заголовок из своей программы,
> а по окончанию - вернешь на место старый.
хм.. как, если копий батников запустивших меня несколько (и вероятно даже запущенных "меня" несколько)? можно как то получить хендл консоли меня запустившей?
← →
Ляпа (2008-12-28 13:44) [28]
> h := FindWindow("ConsoleWindowClass", nil);
> Окну присваивается уникальное имя путем SetConsoleTitle,
>
> это имя и используется для поиска.
Просто в твоём примере я этого не вижу (ничего личного и буквоедского, обычное уточнение)
← →
Юрий Зотов © (2008-12-28 15:12) [29]Непонятно, зачем тут вобще нужен батник. Все, что он делает, может сделать сама программа и тогда проблемы с переменными среды просто исчезают (ведь программа может не только запустить дочерний процесс, но и передать ему свое окружение).
← →
antonn © (2008-12-28 16:20) [30]батник проще править, ничего не надо перкомпилировать.
← →
Leonid Troyanovsky © (2008-12-28 17:05) [31]
> Ляпа (28.12.08 13:44) [28]
> Просто в твоём примере я этого не вижу (ничего личного и
> буквоедского, обычное уточнение)
В msdn подобная статья есть, и если уж это кого интересует, то
тот не сможет, IMHO, пройти мимо.
Пока о намерениях мы можем только гадать, я не вижу смысла
в полнофункциональных примерах.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c