PDA

Показать полную графическую версию : [решено] Как сдедать выполнение команды только после выполнения куска кода?


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

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

не работает »да вроде работает... :unsure:

Ingolder
22-08-2010, 22:36
возможно он не работает изза вложенности. у меня там типа:

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

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

amel27
23-08-2010, 07:08
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, кажется это то, о чём вы и говорили.

deepred
31-08-2010, 14:05
Так, товарищи, вы меня не понимаете потому что по ходу я не понимаю, чем отличается вот такая конструкция
команда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 »
Вас не устраивает такой вариант?
Используйте оператор "&&" - для выполнения команды, только
после удачного завершения предыдущей...

gora
31-08-2010, 14:17
чем отличается вот такая конструкция
команда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