|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменение глобальной переменной в дочернем процессе. |
|
|
CMD/BAT - [решено] Изменение глобальной переменной в дочернем процессе.
|
Экзорцист Сообщения: 969 |
Профиль | Отправить PM | Цитировать Здравствуйте.
Помогите разобраться. Есть два исполняемых фала со следующим содержимым: xxx.cmd echo off SET MY_ERRORLEVEL1=1 echo xxx1 MY_ERRORLEVEL1=%MY_ERRORLEVEL1% pause start yyy.cmd echo xxx2 MY_ERRORLEVEL1=%MY_ERRORLEVEL1% pause pause echo off echo yyy1 MY_ERRORLEVEL1=%MY_ERRORLEVEL1% SET MY_ERRORLEVEL1=2 echo yyy2 MY_ERRORLEVEL1=%MY_ERRORLEVEL1% pause exit Вопрос - как в дочернем процессе изменить значение переменной, определенной в родительском процессе? Причем изменить так, чтобы новое значение было доступно в родительском процессе? Спасибо. P.S. общая задача такова - необходимо сделать бэкап 9 папок с разных компов. При этом, для экономии времени, копирование запускается в 9 процессов. При этом, на время выполнения дочерних процессов копирования, родительский процесс встает на паузу (ping -n 500 localhost > nul). Копирование может закончится ошибкой доступа - поэтому хочу возвращать из дочернего процесса значение переменной %ERRORLEVEL%, значение которой присвою переменным MY_ERRORLEVEL1..MY_ERRORLEVEL9 |
|
Отправлено: 11:24, 09-02-2015 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Michael:
Цитата Michael:
Цитата Michael:
Цитата Michael:
Суть проблемы в том, что мы можем либо исполнять последовательно, получая результат по ErrorLevel/ExitCode дочернего процесса, либо, как у Вас, параллельно — не имея возможности получить результат исполнения по ErrorLevel/ExitCode дочернего процесса. Я бы подумал о переходе на WSH («WshRemote»), либо PowerShell («WinRM»). Если никак — попробуйте, например, писать результат из дочерних пакетных файлов в единый текстовый файл, по строчке на машину. Родительский пакетный файл очищает/удаляет его, затем запускает по «start» N порождённых пакетных файлов отдельно. Каждый из них по исполнении дописывает свой результат в единый текстовый файл. Всё это время, родительский пакетный файл в бесконечном цикле ожидания раз, допустим, в пять секунд проверяет этот текстовый файл на предмет наличия в нём записей от всех порождённых дочерних файлов. Как только все записи окажутся в наличии — происходит выход из цикла ожидания, разбор этого текстового файла и вывод результатов. |
||||
Отправлено: 18:49, 09-02-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1754
|
|
Отправлено: 21:45, 09-02-2015 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Foreigner, как это будет выглядеть со «start 2.cmd»?!
|
Отправлено: 22:09, 09-02-2015 | #4 |
Экзорцист Сообщения: 969
|
Профиль | Отправить PM | Цитировать Iska, спасибо. Пока попробую остановиться на использовании временных файлов, создаваемых в дочерних процессах и анализируемых в родительском.
Foreigner, если я правильно понял ваш код, то выполнение файла 1.cmd остановится на время выполнения файла 2.cmd. Правильно? Меня такой вариант не устраивает - слишком долго придется ждать. И еще. Не могли бы вы объяснить 2 момента - зачем в начале используется :: и зачем нужны кавычки в строке set "var=1"? Спасибо. upd: :: просто комментарий с именем файла? |
|
Последний раз редактировалось Michael, 10-02-2015 в 08:38. Отправлено: 08:32, 10-02-2015 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Michael:
Цитата Michael:
Цитата Michael:
|
|||
Отправлено: 09:39, 10-02-2015 | #6 |
Ветеран Сообщения: 1754
|
Цитата Michael:
|
|
Отправлено: 10:12, 10-02-2015 | #7 |
Экзорцист Сообщения: 969
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 10:42, 10-02-2015 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Michael:
|
|
Отправлено: 11:33, 10-02-2015 | #9 |
Экзорцист Сообщения: 969
|
Профиль | Отправить PM | Цитировать Iska, нет, меня интересует именно системная переменная ERRORLEVEL. Она будет своя в каждом процессе?
P.S. своя - в смысле независимая от других процессов. |
Отправлено: 11:44, 10-02-2015 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Реализация функций длины переменной, выделение подстроки с параметрами в переменной. | NiOl | Скриптовые языки администрирования Windows | 7 | 31-01-2019 19:58 | |
CMD/BAT - [решено] В переменной содержится имя переменной | opravdin | Скриптовые языки администрирования Windows | 3 | 28-01-2013 11:11 | |
DNS в дочернем домене | niklep | Microsoft Windows NT/2000/2003 | 1 | 23-01-2012 10:49 | |
V. 5.5/2000/2003 - Установка Exchange 2010 в дочернем домене. | coldnet | Microsoft Exchange Server | 3 | 11-02-2011 14:00 | |
[решено] Глобальный каталог в дочернем домене | SanyaJoker | Microsoft Windows NT/2000/2003 | 33 | 28-04-2009 14:47 |
|