Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как сдедать выполнение команды только после выполнения куска кода? (http://forum.oszone.net/showthread.php?t=183591)

Ingolder 22-08-2010 19:08 1479484

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

amel27 22-08-2010 19:20 1479495

Цитата:

Цитата Ingolder
нужно упорядочить выполнение кода блоками, т.е. чтобы второй блок команд выполнялся только после завершения первого блока команд »

чем не устраивает один блок после другого (с новой строки)?..
"&" просто позволяет иногда объединить несколько строк в одну - не более того

Цитата:

Цитата Ingolder
не работает »

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

Ingolder 22-08-2010 22:36 1479601

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

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

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

amel27 23-08-2010 07:08 1479731

Ingolder, не вижу принципиальной разницы, давайте конкретный пример:
Код:

@echo off
(
(echo.1)&(echo.2)
 echo.3
)&(
(echo.4)&(echo.5)
 echo.6
)


megaloman 23-08-2010 16:51 1480136

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

@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 1485586

Так, товарищи, вы меня не понимаете потому что по ходу я не понимаю, чем отличается вот такая конструкция
команда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 1485611

Цитата:

Цитата 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 »

Вас не устраивает такой вариант?
Используйте оператор "&&" - для выполнения команды, только
после удачного завершения предыдущей...

gora 31-08-2010 14:17 1485631

Цитата:

Цитата 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

С учетом сказанного выше о дочерних процессах.

Ingolder 01-09-2010 22:52 1486825

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


Время: 20:01.

Время: 20:01.
© OSzone.net 2001-