Показать полную графическую версию : [решено] Как сдедать выполнение команды только после выполнения куска кода?
Ingolder
22-08-2010, 19:08
Собственно, символ & означает, чтобы в конструкции команда1 & команда2 команда 2 выполнялась только после завершения команды 1.
Мне нужно упорядочить выполнение кода блоками, т.е. чтобы второй блок команд выполнялся только после завершения первого блока команд.
конструкция типа
(
... .
...
) & (
.....
.....
)
не работает
как правильно то?
нужно упорядочить выполнение кода блоками, т.е. чтобы второй блок команд выполнялся только после завершения первого блока команд »чем не устраивает один блок после другого (с новой строки)?..
"&" просто позволяет иногда объединить несколько строк в одну - не более того
не работает »да вроде работает... :unsure:
Ingolder
22-08-2010, 22:36
возможно он не работает изза вложенности. у меня там типа:
(
(...)&(...)
....
)&(
(...)&(...)
....
)
или вложенность тоже должна работать? = )
Ingolder, не вижу принципиальной разницы, давайте конкретный пример:
@echo off
(
(echo.1)&(echo.2)
echo.3
)&(
(echo.4)&(echo.5)
echo.6
)
megaloman
23-08-2010, 16:51
С моей точки зрения, если речь идёт о неких блоках, логично оформить их в виде процедур - читаемость кода лучше, особенно если речь идёт о какой-то вложенности (правда, что под этим подразумевается, от меня пока ускользает).@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
Использование процедур позволяет компоновать код достаточно гибко и читаемо.
Ingolder
31-08-2010, 13:51
Так, товарищи, вы меня не понимаете потому что по ходу я не понимаю, чем отличается вот такая конструкция
команда1
команда2
вот от такой:
команда1 & команда2
Насколько я понимаю, в первом случае командная строка инициирует исполнение команды1, и после этого инициирует исполнение команды2, не дожидаться завершения команды1, а во втором случае она запускает команду 2 только после завершения команды1.
У меня есть:
команда1
команда2
команда3
команда4
Мне нужно чтоб :
-команда 2 выполнилась только после завершения команды1
-команда 4 выполнилась только после завершения команд 1, 2 и 3.
Как это сконструировать?
((команда1 & команда2)
команда3) & команда 4
так будет работать? или как правильно?
amel27, кажется это то, о чём вы и говорили.
Так, товарищи, вы меня не понимаете потому что по ходу я не понимаю, чем отличается вот такая конструкция
команда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%
Как это сконструировать? »
Call :Comm1
Call :Comm2
Call :Comm3
GoTo :EOF
:Comm1
Echo Здесь команды первого блока
GoTo :EOF
:Comm2
Echo Здесь команды второго блока
GoTo :EOF
:Comm3
Echo Здесь команды третьего блока
GoTo :EOF »
Вас не устраивает такой вариант?
Используйте оператор "&&" - для выполнения команды, только
после удачного завершения предыдущей...
чем отличается вот такая конструкция
команда1
команда2
вот от такой:
команда1 & команда2 »
Отличается только формой записи, в первой две строки, а во второй в одну строку.Насколько я понимаю, в первом случае командная строка инициирует исполнение команды1, и после этого инициирует исполнение команды2, не дожидаться завершения команды1 »
Не правильно понимаете. В обоих случаях выполнение команды 2 начнется только после завершения команды 1.
Но здесь нужно сделать оговорку. Если команда 1 некий запускаемый файл, то он может порождать дочерний процесс и закрыть основной процесс не дожидаясь завершения дочернего процесса. Команда 2 ждет завершения именно основного процесса команды 1 и после его закрытия запускается команда 2 хотя фактически дочерний процесс команды 1 может еще продолжаться.
Если Вы имеете дело именно с такими командами, то блоки и & здесь вряд ли помогут.У меня есть:
команда1
команда2
команда3
команда4
Мне нужно чтоб :
-команда 2 выполнилась только после завершения команды1
-команда 4 выполнилась только после завершения команд 1, 2 и 3.
Как это сконструировать? »
Да так как написано у Вас и будет выполняться:команда1
команда2
команда3
команда4С учетом сказанного выше о дочерних процессах.
Ingolder
01-09-2010, 22:52
Огромное спасибо всем отписавшимся! За всё - За примеры и объяснения.
Вопрос прояснился. :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.