Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.009 c
10-1151392037
GrBob
2006-06-27 11:07
2009.02.08
Обращение к удаленном OLE-объекту


15-1228938459
js jin
2008-12-10 22:47
2009.02.08
Загрузка страницы


15-1228844071
reteiktor
2008-12-09 20:34
2009.02.08
расстановка ферзей


15-1229322138
KSergey
2008-12-15 09:22
2009.02.08
Проблемы с доступом в сеть Интернет (дома)


6-1198670146
DmT
2007-12-26 14:55
2009.02.08
ICQ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский