Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как сдедать выполнение команды только после выполнения куска кода?

Ответить
Настройки темы
CMD/BAT - [решено] Как сдедать выполнение команды только после выполнения куска кода?

Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


Собственно, символ & означает, чтобы в конструкции команда1 & команда2 команда 2 выполнялась только после завершения команды 1.
Мне нужно упорядочить выполнение кода блоками, т.е. чтобы второй блок команд выполнялся только после завершения первого блока команд.
конструкция типа
(
... .
...
) & (
.....
.....
)
не работает
как правильно то?

Отправлено: 19:08, 22-08-2010

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Ingolder:
нужно упорядочить выполнение кода блоками, т.е. чтобы второй блок команд выполнялся только после завершения первого блока команд »
чем не устраивает один блок после другого (с новой строки)?..
"&" просто позволяет иногда объединить несколько строк в одну - не более того

Цитата Ingolder:
не работает »
да вроде работает...
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:20, 22-08-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


возможно он не работает изза вложенности. у меня там типа:

(
(...)&(...)
....
)&(
(...)&(...)
....
)

или вложенность тоже должна работать? = )

Отправлено: 22:36, 22-08-2010 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Ingolder, не вижу принципиальной разницы, давайте конкретный пример:
Код: Выделить весь код
@echo off
( 
(echo.1)&(echo.2)
 echo.3
)&(
(echo.4)&(echo.5)
 echo.6
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:08, 23-08-2010 | #4


Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


С моей точки зрения, если речь идёт о неких блоках, логично оформить их в виде процедур - читаемость кода лучше, особенно если речь идёт о какой-то вложенности (правда, что под этим подразумевается, от меня пока ускользает).
Код: Выделить весь код
@Echo off

Call :Comm1
Call :Comm2
Call :Comm3
GoTo :EOF

:Comm1
Echo Здесь команды первого блока
GoTo :EOF

:Comm2
Echo Здесь команды второго блока
GoTo :EOF

:Comm3
Echo Здесь команды третьего блока
GoTo :EOF
Конструкция

Call :Comm1|Call :Comm2|Call :Comm3

Работает тоже, как, впрочем и

Call :Comm1 & Call :Comm2 & Call :Comm3
Цитата:
чтобы второй блок команд выполнялся только после завершения первого блока команд
Можно вообще изобразить конструкцию

:Comm2
Call :Comm1
Echo Здесь команды второго блока
GoTo :EOF

Использование процедур позволяет компоновать код достаточно гибко и читаемо.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-08-2010 в 19:16.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:51, 23-08-2010 | #5


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


Так, товарищи, вы меня не понимаете потому что по ходу я не понимаю, чем отличается вот такая конструкция
команда1
команда2


вот от такой:
команда1 & команда2

Насколько я понимаю, в первом случае командная строка инициирует исполнение команды1, и после этого инициирует исполнение команды2, не дожидаться завершения команды1, а во втором случае она запускает команду 2 только после завершения команды1.

У меня есть:
команда1
команда2
команда3
команда4

Мне нужно чтоб :
-команда 2 выполнилась только после завершения команды1
-команда 4 выполнилась только после завершения команд 1, 2 и 3.

Как это сконструировать?

((команда1 & команда2)
команда3) & команда 4

так будет работать? или как правильно?

amel27, кажется это то, о чём вы и говорили.

Отправлено: 13:51, 31-08-2010 | #6


Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить PM | Цитировать


Цитата Ingolder:
Так, товарищи, вы меня не понимаете потому что по ходу я не понимаю, чем отличается вот такая конструкция
команда1
команда2
вот от такой:
команда1 & команда2 »
Для того чтобы это понять примените этот код:
Код: Выделить весь код
Set a=11 & Set b=12
Echo %a% + %b%
Set a=%b% & Set b=%a%

Echo %a% ^<^> %b% & rem Спасибо, Amel27

и этот код

Set a=11 & Set b=12
Echo %a% + %b%
Set a=%b%
Set b=%a%
Echo %a% = %b%
Цитата Ingolder:
Как это сконструировать? »
Цитата megaloman:
Call :Comm1
Call :Comm2
Call :Comm3
GoTo :EOF
:Comm1
Echo Здесь команды первого блока
GoTo :EOF
:Comm2
Echo Здесь команды второго блока
GoTo :EOF
:Comm3
Echo Здесь команды третьего блока
GoTo :EOF »
Вас не устраивает такой вариант?
Используйте оператор "&&" - для выполнения команды, только
после удачного завершения предыдущей...

Последний раз редактировалось deepred, 31-08-2010 в 16:05.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:05, 31-08-2010 | #7


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата Ingolder:
чем отличается вот такая конструкция
команда1
команда2
вот от такой:
команда1 & команда2 »
Отличается только формой записи, в первой две строки, а во второй в одну строку.
Цитата Ingolder:
Насколько я понимаю, в первом случае командная строка инициирует исполнение команды1, и после этого инициирует исполнение команды2, не дожидаться завершения команды1 »
Не правильно понимаете. В обоих случаях выполнение команды 2 начнется только после завершения команды 1.
Но здесь нужно сделать оговорку. Если команда 1 некий запускаемый файл, то он может порождать дочерний процесс и закрыть основной процесс не дожидаясь завершения дочернего процесса. Команда 2 ждет завершения именно основного процесса команды 1 и после его закрытия запускается команда 2 хотя фактически дочерний процесс команды 1 может еще продолжаться.
Если Вы имеете дело именно с такими командами, то блоки и & здесь вряд ли помогут.
Цитата Ingolder:
У меня есть:
команда1
команда2
команда3
команда4

Мне нужно чтоб :
-команда 2 выполнилась только после завершения команды1
-команда 4 выполнилась только после завершения команд 1, 2 и 3.
Как это сконструировать? »
Да так как написано у Вас и будет выполняться:
Код: Выделить весь код
команда1
команда2
команда3
команда4
С учетом сказанного выше о дочерних процессах.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:17, 31-08-2010 | #8


Аватара для Ingolder

Старожил


Сообщения: 318
Благодарности: 9

Профиль | Отправить PM | Цитировать


Огромное спасибо всем отписавшимся! За всё - За примеры и объяснения.
Вопрос прояснился.

Отправлено: 22:52, 01-09-2010 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как сдедать выполнение команды только после выполнения куска кода?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как записать в переменную результат выполнения команды? MSI Скриптовые языки администрирования Windows 64 24-12-2020 18:20
[решено] Как заткнуть *.cmd? Как скрыть выполнение DOS-овской команды? J-S Автоматическая установка Windows 2000/XP/2003 5 08-05-2010 22:24
Разное - [решено] После выполнения команды пропала оценка производительности Dosmod Microsoft Windows 7 10 01-09-2009 09:00
C/C++ - Выполнение кода и выделение памяти для переменной Mr666 Программирование и базы данных 2 14-06-2008 15:19
Выполнение произвольного кода Windows Media Player9 mar Защита компьютерных систем 3 24-12-2004 22:18




 
Переход