|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - запуск в свернутом виде (start /min, cmd /K, exit) |
|
CMD/BAT - запуск в свернутом виде (start /min, cmd /K, exit)
|
Старожил Сообщения: 207 |
Профиль | Отправить PM | Цитировать
В Win9x команда start была отдельным исполняемым модулем start.exe
В WinXP/server START стала командой CMD.EXE со следующими нюансами:
Если ваши сценарии простые, проблема покажется несущественной и надуманной. В таком случае пост не для вас. Почувствовать проблему можно только, если ваши сценарии достаточно сложны и взаимосвязаны, могут запускаться непосредственно, из других сценариев, а также могут запускаться из планировщика (также непосредственно или косвенно). Допустим, есть BAT, который прекрасно работает. Мы его решили запускать через start /min из планировщика. Всего-то изменение способа запуска повлечет неприятную необходимость менять код: все goto :eof придется заменить на EXIT + поставить EXIT в конце (иначе окно не закроется и со временем накопится столько незакрытых черных окон, что сервер упадет). При этом BAT станет непригоден для использования, если он вызывается из другого BAT (т.к. завершится весь процесс CMD). Получается, если ставить цель написать сценарий, корректно работающий в различных вариантах запуска, необходимо следовать правилу, согласно которому, каждому сценарию должна в параметрах передаваться информацию о способе его запуска, а этот сценарий, в свою очередь, должен снабжать этой же информацией другие сценарии в цепочке, передавая ее параметрах вызова. Все это крайне неприятно, если не иметь отдельный исполняемый EXE модуль (как в Win9x), выполняющий запуск процесса/сценария в свернутом виде. Я решил проблему такой программкой на дельфи. Это снимает все негативные моменты + дает дополнительный бонус в виде отсутствия мелькания черных окон и/или сбивания фокуса при запуске из планировщика. Первый параметр - имя процесса (можно указывать EXE и также непосредственно BAT, без полного пути и расширения), остальные - параметры запускаемого процесса. Например: startmin cmd /c dir c:\*.* startmin "c:\Admin scripts\daily backup.bat" "\\server\common files\*.*" program startmin; uses SysUtils, Windows,ShellAPI; var Param,ProgCmdLine:AnsiString; i:integer; begin ProgCmdLine := ''; for i:= 2 to ParamCount do begin if i >= 3 then ProgCmdLine := ProgCmdLine +' '; Param := ParamStr(i); if Pos(' ',Param) <> 0 then Param := '"'+Param+'"'; ProgCmdLine := ProgCmdLine + Param; end; ShellExecute(0,nil,PChar(ParamStr(1)),PChar(ProgCmdLine),nil,SW_SHOWMINNOACTIVE); end. |
|
------- Отправлено: 01:43, 12-06-2012 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Iska:
результатом может быть наличие-отсутствие файлов-семафоров, доступность ресурсов, состояние аппаратуры - что угодно |
|
------- Отправлено: 11:19, 12-06-2012 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать То бишь, чтобы организовать связь, дочерний пакетный файл всё одно придётся править.
|
Отправлено: 11:38, 12-06-2012 | #12 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Связь может быть организована в обратном направлении: родительский скрипт может проверить результаты работы параллельных дочерних скриптов, которые не надо ни коим образом подправлять. Так или иначе любые действия приходится программировать. Мне кажется, Вы не уловили основную мысль: речь не о том, что startmin волшебным образом позволяет ничего не делать, а о том, что дочерний скрипт можно писать, не думая о том, каким способом он вызван и как обеспечить закрытие окна CMD. |
|
------- Отправлено: 14:53, 12-06-2012 | #13 |
Ветеран Сообщения: 1754
|
Цитата CyberMuesli:
Цитата CyberMuesli:
|
||
Отправлено: 15:39, 12-06-2012 | #14 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
Мнение немного поверхностное, я написал в чем трудности с EXIT. start /b забавный ключ, но не запускает программу в свернутом виде, а так же не избавляет от необходимости предпринимать специальные меры для закрытия окна CMD после завершения скрипта. Все это следствие того, что проблема кажется Вам надуманной и Вы не хотите в нее вникнуть. |
|
------- Отправлено: 15:46, 12-06-2012 | #15 |
Ветеран Сообщения: 1754
|
Цитата CyberMuesli:
Второй и третий батник одинаковые |
|
Отправлено: 15:56, 12-06-2012 | #16 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
Кроме того, ключ /B приводит к полному хаосу в стандартном вводе и выводе, потому что окно одно на всех. Кроме того, вы не видите, что main.cmd заканчивает свою работу РАНЬШЕ 2.cmd и 3.cmd, а не наоборот, как вы утверждаете. Кроме того, вы не поняли, что моя цель - вовсе не закончить 2 и 3 раньше, чем main. Итого, вы уводите беседу очень далеко и совсем в другую сторону. |
|
------- Последний раз редактировалось CyberMuesli, 12-06-2012 в 18:14. Отправлено: 17:47, 12-06-2012 | #17 |
Ветеран Сообщения: 1754
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
|||||
Отправлено: 18:23, 12-06-2012 | #18 |
Старожил Сообщения: 207
|
Профиль | Отправить PM | Цитировать Цитата Foreigner:
Не запускает параллельно в свернутом окне. Цитата Foreigner:
Вы не уловили основную мысль: цель - чтобы дочерний скрипт можно писать, не думая о том, каким способом он вызван и как обеспечить закрытие окна CMD. Ваш способ start /b имеет дополнительные недостатки с выводом + не обеспечит закрытие окна в случае запуска из планировщика задач через start /b или start /min. Если же Вы замените exit /b на exit в main.cmd, вы сделаете этот скрипт непригодным для вызова в качестве дочернего из другого родительского скрипта. |
||
------- Отправлено: 18:55, 12-06-2012 | #19 |
Ветеран Сообщения: 1754
|
Цитата CyberMuesli:
Цитата CyberMuesli:
Цитата CyberMuesli:
|
|||
Отправлено: 19:31, 12-06-2012 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
есть ли утилитка для win7, которая автоматич запускает в свернутом виде программы? | HarrysFerrarievich | Хочу все знать | 5 | 15-12-2011 12:16 | |
fsck died with exit code 4 | hnsk | Общий по Linux | 2 | 20-09-2010 23:08 | |
[решено] Как после команды Run выполнить Exit | Centrinar | AutoIt | 5 | 01-02-2010 21:30 | |
kde cannot start :((( | DominuS | Общий по Linux | 7 | 04-05-2005 07:00 | |
CD Start-It | BORIS YK | Хочу все знать | 3 | 15-12-2003 00:10 |
|