![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Изменение глобальной переменной в дочернем процессе. |
|
CMD/BAT - [решено] Изменение глобальной переменной в дочернем процессе.
|
Экзорцист Сообщения: 969 |
Здравствуйте.
Помогите разобраться. Есть два исполняемых фала со следующим содержимым: 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 |
Ветеран Сообщения: 1759
|
Цитата Michael:
|
|
Отправлено: 11:47, 10-02-2015 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Michael:
Псевдопеременная же окружения ERRORLEVEL доступна только при включённой расширенной обработке команд (которая, впрочем, включена по умолчанию). Она вычисляется динамически, в момент раскрытия (т.е., на неё действуют все правила раскрытия обычных переменных окружения) и принимает значение кода ошибки (кода возврата), если тот был установлен одной из предыдущих внутренних или внешних команд. Если Вы принудительно определите её по «set» — получите обычную переменную окружения с тем же именем. |
|
Отправлено: 19:08, 10-02-2015 | #12 |
Ветеран Сообщения: 2205
|
Профиль | Отправить PM | Цитировать |
Последний раз редактировалось sov44, 16-10-2016 в 19:09. Отправлено: 18:38, 16-10-2016 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата sov44:
Цитата sov44:
|
||
Отправлено: 20:03, 16-10-2016 | #14 |
Ветеран Сообщения: 2205
|
Профиль | Отправить PM | Цитировать Задача простая - получить "рапорт" об исполнении задания дочернего процесса. Хотел через переменную, сделал через временный файл.
Под спойлером скрипт удаления не верных ярлыков. Вот только QL не смог победить (( Скрытый текст
@Echo Off SetLocal enabledelayedexpansion ( echo Set oShell = CreateObject^("WScript.Shell"^) echo Set oShortcut = oShell.CreateShortcut^(Wscript.Arguments.Item^(0^)^) echo WScript.Echo oShortcut.TargetPath )>$.vbs set dir1=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders set dir2=HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders Ver | Find "5." >Nul && call :L_XP Ver | Find "6." >Nul && call :L_7 if exist f_lnk (echo Очистка от не верных ярлыков ^(без QL^) - OK) if not exist f_lnk (echo Очистка от не верных ярлыков ^(без QL^) - --) del $.vbs del f_lnk pause exit :L_XP chcp 1251>nul for %%a in ("%dir1%","%dir2%") do ( for /f "tokens=1-2* delims=:" %%b in ('reg query "%%~a" ^|find ":"') do ( chcp 866>nul& set r1=%%b cmd /v /c "for %%x in ("!r1:~-1!:%%c\*.lnk") do @for /f "delims=" %%y in ('cscript //nologo "$.vbs" "%%~x"') do @if not exist "%%~y" (del /f /q "%%~x"& >f_lnk echo.1)" )) chcp 866>nul exit /b :L_7 for %%a in ("%dir1%","%dir2%") do ( for /f "tokens=1-2* delims=:" %%b in ('reg query "%%~a" ^|find ":"') do ( set r1=%%b cmd /v /c "for %%x in ("!r1:~-1!:%%c\*.lnk") do @for /f "delims=" %%y in ('cscript //nologo "$.vbs" "%%~x"') do @if not exist "%%~y" (del /f /q "%%~x"& >f_lnk echo.1)" )) exit /b |
Отправлено: 20:37, 16-10-2016 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 21:21, 16-10-2016 | #16 |
Ветеран Сообщения: 2205
|
Профиль | Отправить PM | Цитировать Цитата Iska:
![]() Цитата Iska:
|
||
Отправлено: 22:14, 16-10-2016 | #17 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата sov44:
Второй — например, через тот же указанный Вами вариант со временным файлом. Единственно — в родительском использовать, скажем, процедуру получения имени временного файла: CMD/BAT: генерация пути для временного файла или папки — Коллекция скриптов и идей — Серый форум, передача этого полученного имени в дочерний через параметр, после возврата в родительский — анализ содержимого временного файла и удаление этого временного файла. Можно комбинировать с первым способом — например, можно условиться, что нулевой код возврата будет означать корректную работу дочернего пакетного файла (а разные не нулевые — ту или иную ошибку), а развёрнутые детали могут передаваться посредством временного файла. |
|
Отправлено: 22:43, 16-10-2016 | #18 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|