Пакетные и командные файлы (*. bat и *.cmd)

  • im2002

Тема: CMD/BAT: как правильно использовать start /wait

start /wait "C:\Program Files (x86)\1cv82\common\1cestart.exe"
logoff.exe 

Yury

  • Yury

Re: CMD/BAT: как правильно использовать start /wait

start "" /wait "C:\Program Files (x86)\1cv82\common\1cestart.exe"
start "" "logoff.exe" 

im2002

  • im2002

Re: CMD/BAT: как правильно использовать start /wait

start "" /wait "C:\Program Files (x86)\1cv82\common\1cestart.exe"
start "" "logoff.exe" 

Может вовсе нельзя реализовать через этот механизм???

Yury

  • Yury

Re: CMD/BAT: как правильно использовать start /wait

Судя по имени приложения “1cestart.exe“, оно не является основным в программе. Очевидно, оно запускает другое, основное, приложение и закрываетя. А команда “start “” /wait” тут не “виновна”, она “честно” выполняет свою задачу.

Вывод: в пакетном файле обращаться непосредственно к основному приложению программы.

im2002 (изменено: im2002, 2014-04-10 08:37:28)

  • im2002

Re: CMD/BAT: как правильно использовать start /wait

Да, судя по всему Вы правы, т.к. “основной процесс” называется 1сv8.exe.
Переделал, вроде работает, буду проверять дальше, спасибо.

Люди, которым знаком термин батник, знают, что BAT файлы могут существенно упростить жизнь и экономить время, если уметь их правильно писать и использовать. В этой статье я расскажу о том, как создавать BAT файлы и познакомлю вас с распространенными ошибками, которые обычно возникают при их написании.

создание bat-файла

Редактировать BAT файл можно в блокноте или любом другом текстовом редакторе, ориентированным на работу с кодом.

Теперь перейдем непосредственно к практической информации. В сети многие ищут ответ на вопрос Как быть с пробелами в BAT файлах?. В путях к папкам и исполняемым файлам наличие пробела вызывает ошибку. Самый распространенный ответ: Заключи путь в кавычки. И этот ответ не верен. Правда некоторые будут с пеной у рта утверждать, что он работает. Итак, появилось два почемупочему не верен и почему некоторые будут.

На Windows (как, впрочем, и на UNIX) установленные в системе программы соответствующим образом регистрируются системой. Поэтому некоторые из установленных программ могут запускаться одной простой командой из BAT файла или из апплета Выполнить панели Пуск. Одной из таких программ является Firefox:

 firefox

Если после этой команды писать путь к исполняемому файлу, то происходит следующее: запускается обозреватель Firefox и пробует обработать запрос, то есть файл, путь к которому указан. То есть, если указать следующее:

 firefox C:\Program Files\Mozilla Firefox\firefox.exe

Обозреватель откроется, чтобы не было написано после . Именно поэтому некоторые товарищи будут уверять что все прекрасно работает. Однако, если взять портативную программу, то ситуация окажется совсем иная. Рассмотрим в качестве примера ftp-клиент Filezilla. Поскольку система не знает о программе, вышеупомянутая строчка

 filezilla

работать не будет. Чтобы запустить неизвестную системе программу, надо указать к ней путь:

 D:\FileZilla\FileZilla.exe

Длинныe имена в bat-файлах

Теперь поговорим о путях и пробелах. Первый способ избежать этой проблемы – использование короткого имени.

 C:\Program Files\Sound Club\scw.exe

В примере два имени с пробелами. Заменим их короткими. Правила создания коротких имен следующие: в коротком имени используются первые шесть символов имени без учета пробелов, после имени указывают порядковый номер папки с помощью символа ~. Так как папки и у меня в единственном числе, получится следующее:

Program Files - Progra~
Sound Club - SoundC~
 C:\Progra~\SoundC~\scw.exe

Если рядом будут присутствовать две папки, например и , то следуя правилам, в примере выше надо будет указать , так как в этом случае окажется вторым именем (имена считаются в алфавитном порядке).

Но этот способ неудобен тем, что приходится указывать порядковые номера. Ситуация с более менее нормальная. Мало у кого встретится две подобные папки на системном диске. Но если вы решили установить несколько продуктов на свой компьютер. У вас получится несколько папок, например:

Mozilla Firefox
Mozilla Thunderbird
Mozilla Sunbird

Короткими именами для них будут

Mozill~1
Mozill~2
Mozill~3

А теперь представьте, что вы написали BAT файл с упоминанием этих программ. Если удалить Firefox, оставшиеся записи перестанут работать, а если удалить Thunderbird, перестанет работать запись для Sunbird. Короче, способ с короткими именами – не наш способ.

Пробелы и кавычки в bat-файлах

Кавычки на самом деле работают, но не с теми способами, которые обычно советуют. Советуют обычно следующее:

 "C:\Program Files\Sound Club\scw.exe"

Так команда не сработает, поскольку если посмотреть справку по ней (), то в справке вы увидите следующее:

 ["заголовок"] [/D путь] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE узел NUMA] [/AFFINITY маска сходства] [/WAIT] [/B]
      [команда/программа] [параметры]

Как видите, первым параметром идёт заголовок окна и он как раз в кавычках. Этот параметр необязательный, но его всё же советуют указывать (например, тут), чтобы избежать ошибок при выполнении команды. Внутри кавычек можно ничего не писать. Получится так:

 "" "C:\Program Files\Sound Club\scw.exe"

Также сработает и вариант с заключением в кавычки всех имён с пробелами по отдельности:

 C:\"Program Files"\"Sound Club"\scw.exe

Однако, в ряде случаев не работает ничего из вышеописанного. В таких случаях я могу посоветовать использовать команду . Переходим на системный раздел, затем с помощью в папку и запускаем программу ():


 \Program Files\Sound Club\
 scw.exe

Я думаю, что такой способ будет работать везде. Теперь еще пара важных моментов. Допустим вы создали батник, запускающий три программы и вам нужно на время исключить запуск одной из трех. Это можно сделать удалением строки или ее комментированием. Первый способ – вандальный, а второй смотрите ниже.

 firefox
 jetaudio
rem start defraggler

В данном случае отключен запуск установленной в системе программы Defraggler.exe. Комментируют строки, указывая команду в начале строки. Все BAT файлы выполняются в окне консоли. Чтобы оно исчезало по окончании выполнения команд, не забывайте в конце писать команду на выход

 firefox
 jetaudio
rem start defraggler

Запуск приложений из bat-файла

В первой части статьи я в общих чертах рассказал о BAT файлах. Теперь стало понятно – что это такое и с чем его едят. Во второй части речь пойдет уже о более конкретных вещах. Например, о том, как при помощи BAT файла запустить несколько приложений с определенными настройками или в автоматическом режиме установить программу, чтобы не тратить время на ответы типа Вы согласны с условиями лицензионного соглашения? и не нажимать лишние кнопки.

Выше было изложено несколько способов запуска приложений при помощи BAT файла. Самый первый – это короткая команда на запуск установленной в системе программы.

 firefox

Это не всегда работает. Поэтому такой прием можно вполне применять на какой-то конкретной системе, но в качестве универсального решения он не подходит. Если есть цель заставить работать BAT файл везде и всегда, нужно пользоваться полными путями:

 C:\"Program Files"\"Mozilla Firefox"\firefox.exe

Также я отметил, что в BAT файле обязательно должна присутствовать команда на завершение:

 C:\"Program Files"\"Mozilla Firefox"\firefox.exe

Запуск программ в bat-файлах с параметрами (ключами)

Программу можно не просто запускать, а давать ей дополнительные команды при запуске. Например, скомандовать запускаться свернутой:

 /min D:\FileZilla\FileZilla.exe

Скомандовать в данном случае – значит указать ключ. Ключ указывается через слэш после основной команды (). Основной командой в данном случае является . Правда ключ работает только в половине случаев, потому как относится именно к команде запуска , а не к программам, которые эта команда запускает.

Вообще ключей существует очень много и наборы ключей разных программ могут существенно различаться. Есть, правда, несколько общих. Например, ключ справки ( или ). Чтобы проследить работу этого ключа, рассмотрим практический пример. Откройте консоль (Жмёте      + , вводите , далее ) и набираете в консоли следующее:

 /?

Консоль выведет на экран перечень допустимых ключей c комментариями для команды .

ключи команды 'start'

Обратите внимание на ключ . В некоторых случаях он бывает просто незаменим. Например, вы решили с помощью BAT файла распаковать архив с программой и эту самую программу запустить. В батнике получится две команды – на распаковку и на запуск. Поскольку команды при запуске BAT файла выполнятся почти одновременно, архив распаковаться не успеет и запускать будет нечего. Поэтому будет ошибка. В этом случае на помощь придет ключ /wait:

Таким образом система сначала выполнит первое действие, дождется его завершения и только после этого приступит ко второму. Если необходимо подождать конкретный отрезок времени, то проще воспользоваться консольной утилитой Sleep. В нужном месте BAT файла пишете следующую команду (число – количество секунд):

 Sleep.exe 

С помощью ключей можно делать многое. Есть возможность устанавливать приложения в тихом режиме. Для этого используется несколько ключей в зависимости от типа инсталятора, применяющегося для установки программы на компьютер:

/S
/s
/q
/silent
и ряд других

В ряде случаев бывает очень удобно. Антивирус Avast имеет опцию тихой установки в корпоративной версии. В бесплатной (домашней) версии тихой установки якобы нет. Однако, если вы в курсе как работает инсталятор , вы поймете, что это утка, так как этот инсталятор сам по себе поддерживает ключ тихой установки . А значит все продукты, выполненные на его базе – тоже. И Avast не исключение. Просто создаете в папке с Avast’ом BAT файл с содержанием

 avast.exe /S

Есть и другие возможности по управлению программами при помощи BAT файлов. Можно запустить программу, приказав ей открыть файл при запуске. Я пользуюсь этим способом при разработке сайтов. Очень удобно, когда весь твой инструментарий открывает нужные документы и папки нажатием всего одной кнопки:

rem соединение с ftp-сервером
 /min D:\FileZilla\FileZilla.exe "ftp://логин:пароль@сервер"

rem открытие index.php в Firefox
 C:\"program files"\"mozilla firefox"\firefox.exe "http://localhost/папка_сайта/index.php"

rem открытие start.html в текстовом редакторе
 /min C:\"Program Files"\текстовой_редактор.exe "E:\сервер\папка_сайта\index.html"

rem открытие папки с файлами сайта
 /min E:\сервер\папка_с_сайтом

rem выход из консоли

Отмечу, что все вышеописанные приемы можно применять в различных комбинациях и сочетаниях.

 /min /wait program.exe /m /S
 C:\Directory\program2.exe "C:\Files\file.odt"

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

 C:\"program files"\"mozilla firefox"\firefox.exe "http://localhost/папка_сайта/index.php"

В качестве эпилога предложу для ознакомления конвертер BAT файлов в приложения формата – Bat_To_Exe_Converter. BAT файл – это не всегда эстетично, а с помощью конвертера можно запаковать батник в exe’шник, оформив его любой иконкой на ваш выбор.

:/>  Как устранить ошибку «com.android.phone» простыми методами

Наткнулся ещё на один конвертер BAT в EXE, можете рассмотреть в качестве альтернативы предыдущей программе: Advanced Bat To Exe Converter

На этом всё.

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

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

Пакетные файлы (*.cmd или *.bat) могут быть выполнены на различных стадиях установки Windows. Использование пакетных файлов помогает автоматизировать выполнение нескольких заданий. При этом никакого вмешательства пользователя не требуется.

Типичное содержимое пакетного файла

Пакетные файлы поддерживают все команды, которые могут быть выполнены из командной строки. Чтобы увидеть командую строку достаточно проделать следующее: Пуск->Выполнить->cmd->ОК

Давайте попробуем сделать простенький пакетный файл. Откройте Блокнот и скопируйте туда следующий текст:

title Batch File Testing
echo Hello World
echo.
echo Starting Notepad
start notepad
echo.
echo Starting Wordpad
start Wordpad
echo.
pause
exit

Сохраните файл с любым именем и в любом месте. Убедитесь, что вы назначили расширение *.cmd (а не .txt, которое Блокнот присвоит по умолчанию). Теперь запустите ваш файл. Вы увидите, что он назначит окну имя “Batch File Testing”, запустит Блокнот и WordPad, попросит нажать любую клавишу для продолжения работы и закроет окно.

Что означают команды, использованные в данном файле?

Когда вы начнете добавлять приложения для автоматической установки с инсталляционного диска XP, вы увидите, что в большинстве случаев команды будет выглядеть примерно так:

start /wait %systemdrive%\install\some_application\setup.exe /ключ /еще ключ

запустит установку приложения, а дождется ее окончания перед тем, как выполнить установку следующего приложения. Использование , т.к. в противном случае одновременно запустится установка сразу нескольких приложений и конфликты неизбежны.

Вы всегда можете обратиться к странице Примеров, где можно увидеть различные примеры применения пакетных файлов.

Изменение цветовой гаммы

Во время установки окно, с выполняющимися командами, будет выглядеть так. Несколько мрачновато, но это можно разнообразить, сделав фон и шрифт цветными при помощи команды . Атрибуты цветов задаются в виде двух шестнадцатеричных цифр – первая задает цвет фона, а вторая определяет цвет текста. Каждая цифра может иметь следующие значения:

Таким образом, для ярко-белого шрифта и голубого фона вы используете .

Чтобы посмотреть, как это выглядит на практике, скопируйте текст в блокнот и сохраните файл как colors.cmd.

cls
@echo off
Title Graphics group is being installed now
color 9F
ECHO Adobe Photoshop 7.0
ECHO ACDSee 6.0.3
PAUSE
Title Internet group is being installed now
color 57
ECHO Stay Connected! 3.5
ECHO MSN Messenger 6.2
PAUSE
EXIT

cmdlines.txt, svcpack.inf и [GuiRunOnce]

Метод svcpack.inf, как правило, используется для установки обновлений (хотфиксов). Однако ничто не мешает рассматривать пакетный файл как еще один хотфикс.

Пример содержимого пакетного файла:

@echo off
TITLE Windows XP SP2 - Unattended Installation
ECHO.
ECHO Over the next few minutes you will see automated installations
ECHO of various sofware applications, and registry tweaks being
ECHO implemented.
ECHO.
ECHO Removing Wallpapers and Screensavers...
DEL "%systemroot%\*.bmp"
DEL "%systemroot%\Web\Wallpaper\*.jpg"
DEL "%systemroot%\system32\dllcache\*.scr"
DEL "%systemroot%\system32\*.scr"
ECHO.
ECHO Removing useless shortcuts...
DEL "%systemdrive%\Documents and Settings\All Users\Start Menu\Windows
Update.lnk"
DEL "%systemdrive%\Documents and Settings\All Users\Start Menu\Set
Program Access and Defaults.lnk"
DEL "%systemdrive%\Documents and Settings\All Users\Start Menu\Windows
Catalog.lnk"
ECHO.
ECHO Installing TweakUI 2.10 Powertoy
ECHO Please wait...
start /wait %systemdrive%\Install\TweakUI.msi /qn
ECHO.
ECHO Applying Registry Tweaks...
REGEDIT /S %systemdrive%\Install\RegTweaks.reg
ECHO.
ECHO Deleting ASP.NET User Account created by .NET Framework 1.1...
net user aspnet /delete
ECHO.
EXIT

Он производит удаление обоев и скринсэйверов, устанавливаемых по умолчанию системой, а также некоторых ярлыков. Затем устанавливает TweakUI, импортирует ключи реестра и удаляет учетную запись ASP.NET, созданную при установке .NET Framework. Более содержательный файл вы можете посмотреть на странице примеров.

Куда положить пакетные файлы? 

  • O [GuiRunOnce] рассказывает отдельная небольшая статья в разделе Справочник.
  • cmdlines.txt нужно положить в корень папки $OEM$, и Windows автоматически найдет его во время установки. Чтобы не указывать путь к пакетным файлам, запускаемым из cmdlines.txt, они должны находиться в той же папке, что и cmdlines.txt.
  • svcpack.inf кладется в директорию I386 на вашем инсталляционном диске (не забудьте удалить svcpack.in_ оттуда). Все пакетные файлы, запускаемые изsvcpack.inf, должны находиться в директории I386\svcpack, если только это не прописано иначе в самом файле.

Команда START позволяет запускать приложения в отдельном окне, с возможностью указания некоторых параметров их выполнения.

1. Описание команды START.

1.1. Формат командной строки:

C:\ START ["заголовок"] [/D путь] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL] [/NODE < узел NUMA >] [/AFFINITY < маска сходства >] [/WAIT] [/B] [команда/программа] [параметры]

Для получения справочной информации используется команда start /?

1.2. Параметры командной строки:

Параметры для мультипроцессорных систем /NODE и /AFFINITY не поддерживаются в операционной системе Windows Vista и более ранних версиях ОС Windows.

Указание параметра /NODE позволяет создавать процессы таким образом, чтобы использовать память в системах NUMA. NUMA (Non-Uniform Memory Access — «Неравномерный доступ к памяти» или Non-Uniform Memory Architecture — «Архитектура с неравномерной памятью») — технология, используемая в многопроцессорных системах, использующих общую память. Технология NUMA впервые была реализована в процессорах Intel Xeon. Архитектура системы с NUMA — это множественные узлы, имеющие доступ как к своей локальной памяти, так и к памяти других узлов. Формально память разделяется на быструю локальную и относительно медленную удаленную (поэтому память и “неравномерная”). Например, два процесса, которые взаимодействуют друг с другом через общую память, могут совместно использовать один и тот же предпочтительный узел NUMA для минимизации задержки памяти. Память выделяется из одного узла NUMA по возможности, что позволяет процессам выполняться на процессорах вне указанного узла:

C:\ start /NODE 1 application2.exe

C:\ start /NODE 1 application1.exe

Эти процессы можно ограничить для выполнения на определенных процессорах в одном узле NUMA. В следующем примере приложение application1 выполняется на низкоприоритетных процессорах узла, а приложение application2 выполняется на двух следующих процессорах узла. В этом примере предполагается, что указанный узел имеет минимум четыре логических процессора. Обратите внимание на то, что номер узла можно изменить на другой действительный номер для компьютера без изменения маски сходства:

C:\ start /NODE 1 /AFFINITY 0x3 application1.exe

C:\ start /NODE 1 /AFFINITY 0xc application2.exe

Применительно к стандартным однопроцессорным, но многоядерным процессорам, практическое применение параметров /NODE и /AFFINITY заключается в возможности запуска приложений на конкретных ядрах CPU. Параметр /NODE для однопроцессорных систем всегда равен нулю, а параметр /AFFINITY определяют битовую маску выбора процессорных ядер. Подробнее – в примерах ниже.

Для вызова неисполняемых файлов через механизм сопоставления типов файлов достаточно просто ввести имя файла в командной строке. Например, команда

C:\ START MYFILE.TXT

приведет к запуску текстового редактора NOTEPAD с открытием файла MYFILE.TXT. Сведения о создании подобных сопоставлений из командных файлов приведены в описаниях команд ASSOC и FTYPE.

При запуске приложения с графическим интерфейсом пользователя обработчик команд CMD.EXE не ожидает завершения работы приложения перед возвратом к приглашению командной строки. Подобное новое поведение НЕ относится к запуску приложений из пакетных файлов.

При выполнении командной строки, первым элементом которой является текстовая строка «CMD» без расширения имени файла или указания пути, она заменяется значением переменной COMSPEC. Это предотвращает запуск CMD.EXE из текущей активной папки, если таковая программа там имеется.

Если первый элемент командной строки не содержит расширения имени файла, обработчик команд CMD.EXE использует значение переменной среды PATHEXT, чтобы определить расширения имен исполняемых файлов и порядок поиска нужного файла. По умолчанию для переменной PATHEXT задается значение:

Обратите внимание, что этот синтаксис подобен синтаксису для переменной PATH, то есть отдельные элементы разделяются точкой с запятой.

:/>  Что такое режим разработчика Windows 10 и как его включить?

Если при поиске исполняемого файла нет соответствия ни одному из расширений, выполняется проверка соответствия указанного имени папки. Если имя папки соответствует указанному, то команда START запускает EXPLORER для этого пути. Если такое действие выполняется из командной строки, то оно эквивалентно выполнению команды CD /D для указанного пути. Так, например, команда

C:\ start C:\windows

откроет папку C:\windows в окне проводника.

2. Примеры использования.

2.1. Выдать справку об использовании команды:

C:\ start /?

2.2. При запуске без параметров будет открыто новое окно интерпретатора команд CMD:

C:\ start

2.3. Как и в предыдущем случае, выполнится запуск CMD в новом окне, но в качестве заголовка окна будет отображаться текст My new CMD window:

C:\ start "My new CMD window"

2.4. Выполнится запуск по расширению .msc диспетчера устройств Windows:

C:\ start devmgmt.msc

2.5. Выполнится запуск обозревателя Интернет и откроется страница поисковика Google:

C:\ start http://google.com
C:\ start mailto:test@mail.ru

2.7. Выполнится запуск блокнота в свернутом окне:

C:\ start /min notepad.exe

2.8. Запуск командного файла в свернутом окне с пониженным приоритетом:

C:\ start "Backup Files" /min /belownormal mybackup.bat

2.9. Запуск редактора Microsoft Word в новом окне, развернутом на весь экран и с повышенным приоритетом:

C:\ start /abovenormal /MAX winword.exe

2.10. Запуск программы MyGame с высоким приоритетом:

C:\ start "" /high /MAX "C:\Program Files\Good game\MyGame"

2.12. Управление приоритетами удобно использовать для обеспечения комфортной работы пользователя с интерактивными приложениями на фоне выполнения длительных расчетных задач. Так, например при равных приоритетах редактора MS Word, и расчетной задачи, потребляющей значительную долю ресурсов центрального процессора, может возникнуть эффект подвисаний при работе с текстовым документом. Снижение же приоритета расчетной задачи создаст нормальные условия для работы пользователя, который практически не заметит никакого влияния на работе с документами, поскольку расчетная задача будет в основном выполняться на фоне режима ожидания редактора MS Word. Аналогичным образом можно добиться комфортной работы с интерактивными приложениями с одновременным выполнением ресурсоемких расчетных задач – либо повышая приоритет первых, либо занижая приоритет вторых.

Обратите внимание на то что заголовок окна можно опускать, но особенность обработки входных параметров командой start может привести к неожиданным результатам при попытке запуска программы, имя или путь которой содержит пробел(ы). Например, при попытке выполнить следующую команду:

C:\ start "C:\Program Files\FAR\FAR.EXE"

Из-за наличия пробела в пути к исполняемому файлу, строка для запуска FAR.EXE должна быть заключена в двойные кавычки, однако формат входных параметров для start предполагает обязательное наличие заголовка окна, также заключаемого в двойные кавычки, в результате чего «C:\Program Files\FAR\FAR.EXE» интерпретируется не как исполняемая программа, а как заголовок окна, и команда START выполнит запуск интерпретатора CMD с заголовком окна «C:\Program Files\FAR\FAR.EXE» . Для того, чтобы подобного не случилось нужно использовать любой, пусть даже пустой, заголовок:

C:\ start "" "C:\Program Files\FAR\FAR.EXE"

При выполнении запуска командных файлов с помощью команды start, окно интерпретатора команд (cmd.exe) запускается с параметром /K, т. е. после выполнения команд в командном файле завершения cmd.exe не происходит. Например, имеется командный файл test.bat следующего содержания:

C:\ ECHO TEST
ECHO TEST
EXIT

Команда START кроме всего прочего, позволяет распределять процессорные ядра между запускаемыми приложениями. Иногда это позволяет решить проблему невозможности запуска устаревших приложений, разработанных еще во времена одноядерных систем. Например, старые игры, которые не запускаются с выдачей ошибки типа negative delta time, или зависают с искажением изображения или звука. Подобное наблюдается в некоторых модах S.T.A.L.K.E.R Shadow Of Chernobyl, когда могут возникать зависания при старте программы и при отображении основного меню игры. Запуск игры на одном ядре процессора, как правило, решает эти проблемы.

Для однопроцессорных систем параметр /NODE равен нулю, а параметр /AFFINITY определяют битовую маску для выбора ядер процессора:

  • 0x1 – первое ядро.
  • 0x2 – второе ядро.
  • 0x4 – третье ядро.
  • 0x8 – четвертое ядро.

И так далее. Например, для запуска приложения Блокнот (notepad.exe) на третьем ядре процессора (битовая маска – 0100, или 4 в шестнадцатеричной системе счисления) нужно выполнить команду:

C:\ start /node 0 /affinity 0x4 notepad.exe

Для запуска приложения на первом и четвертом ядре (битовая маска – 1001, или 9 в шестнадцатеричной системе счисления):

C:\ start /node 0 /affinity 0x9 notepad.exe

Для выбора 2-го, 3-го и 4-го ядер – двоичная маска равна 1110 или числу 0xE в шестнадцатеричном виде:

C:\ start /node 0 /affinity 0xE notepad.exe

Для большинства версий команды START, параметр /NODE по умолчанию равен нулю и его можно не задавать:

C:\ start /affinity 0xE notepad.exe

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

I want to have a cmd file with something like:

:one
start /wait (blabla1.exe -q -m 1>blabla1.log 2>&1)

:two
start /wait (blabla2.exe -q -m 1>blabla2.log 2>&1)

where I want the output of the blabla application not the output of the start command.

Is it even possible to have the redirections “local” inside the start command?

Do I have to create a 1 line cmd containing
blabla1.exe -q -m 1>blabla1.log 2>&1
and pass it to the start command?

Update: I need the first one (blabla1.exe) to be finished before I launch the 2nd one (blabla2.exe). That’s the reason for using start /wait.

(Windows XP and up)

asked Aug 4, 2010 at 1:03

Francesca's user avatar

4 gold badges49 silver badges88 bronze badges

Yes it is possible to redirect output using start wait command using the /B switch.

start /B /wait myprog.exe >> output.log

If you need to break in you will have to use Ctrl+Break, Ctrl+C will be ignored. Hope this helps.

Uwe Keim's user avatar

56 gold badges176 silver badges290 bronze badges

answered Aug 22, 2012 at 21:25

Benjamin McGill's user avatar

If not, simply remove the “start /wait” and call the exes directly.

UPDATE: I am fairly certain just removing the “start /wait” will produce the behavior you desire. See below:

:one
notepad.exe
:two
dir

answered Aug 4, 2010 at 1:20

Joshua McKinnon's user avatar

Joshua McKinnon

11 gold badges56 silver badges63 bronze badges

You need to escape > characters to be evaluated inside start command

start /B /wait myprog.exe ^>^> output.log

answered Apr 21, 2022 at 0:16

Jakub Pawlinski's user avatar

Translating the OP’s original sample code, my solution would be:

:one
start /wait cmd.exe "/c blabla1.exe -q -m 1>blabla1.log 2>&1"

:two
start /wait cmd.exe "/c blabla2.exe -q -m 1>blabla2.log 2>&1"

The quotes cause the redirects to be done by the programs that are started, instead of by the start command itself.

Background:
I stumbled upon this question because I have a similar problem, and although the OP didn’t need to use “start /wait” and could have just omitted that part and not have any trouble with the redirects, my problem is that I do need to use “start”, and needed a way to be able to redirect the output of the process to a file.

answered Aug 4, 2022 at 12:25

Ronny D'Hoore's user avatar

Start a program, command or batch script (opens in a new window.)

Always include a TITLE this can be a simple string like “My Script” or just a pair of empty quotes “”
According to the Microsoft documentation, the title is optional, but depending on the other options chosen you can have problems if it is omitted.

If command is an internal cmd command or a batch file then the command processor is run with the /K switch to cmd.exe. This means that the window will remain after the command has been run.

In a batch script, a START command without /wait will run the program and just continue, so a script containing nothing but a START command will close the CMD console and leave the new program running.

Document files can be invoked through their file association just by typing the name of the file as a command.
e.g. START “” MarchReport.DOC will launch the application associated with the .DOC file extension and load the document.

To minimise any chance of the wrong exectuable being run, specify the full path to command or at a minimum include the file extension: START “” notepad.exe

If you START an application without a file extension (for example WinWord instead of WinWord.exe)then the PATHEXT environment variable will be read to determine which file extensions to search for and in what order.
The default value for the PATHEXT variable is: .COM;.EXE;.BAT;.CMD

Start /Wait

The behaviour of START /Wait will vary depending on the item being started, for example

The above will start the calculator and wait before continuing. However if you replace calc.exe with Winword.exe, to run Word instead, then the /wait will stop working, this is because Winword.exe is a stub which launches the main Word application and then exits.

:/>  Как переместить файлы с одного пользователя на другой

Add /B to have everything run in a single window.

In a batch file, an alternative is to use TIMEOUT to delay processing of individual commands.

START vs CALL

Starting a new process with CALL, is very similar to running START /wait, in both cases the calling script will (usually) pause until the second script has completed.

Starting a new process with CALL, will run in the same shell environment as the calling script. For a GUI application this makes no difference, but a second ‘called’ batch file will be able to change variables and pass those changes back to the caller.

In comparison START will instantiate a new CMD.exe shell for the called batch. This will inherit variables from the calling shell, but any variable changes will be discarded when the second script ends.

Run a program

To start a new program (not a batch script), you don’t have to use CALL or START, simply enter the path/file to be executed, either on the command line or within a batch script.

On the command line, CMD.EXE does not wait for the application to terminate and control immediately returns to the command prompt.
Within a command script CMD.EXE will pause the initial script and wait for the application to terminate before continuing.

If you run one batch script from another without using either CALL or START, then the first script is terminated and the second one takes over.

Multiprocessor systems

Processor affinity is assigned as a hex number but calculated from the binary positions (similar to NODRIVES)

These two processes can be further constrained to run on specific processors within the same NUMA node.

Running executable (.EXE) files

When a file that contains a .exe header, is invoked from a CMD prompt or batch file (with or without START), it will be opened as an executable file. The filename extension does not have to be .EXE. The file header of executable files start with the ‘magic sequence’ of ASCII characters ‘MZ’ (0x4D, 0x5A) The ‘MZ’ being the initials of Mark Zibowski, a Microsoft employee at the time the file format was designed.

Command Extensions

Non-executable files can be invoked through their file association just by typing the name of the file as a command. (e.g. WORD.DOC would launch the application associated with the .DOC file extension). This is based on the setting in HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext\OpenWithList, or if that is not specified, then the file associations – see ASSOC and FTYPE.

When executing a command line whose first token is the string CMD without an extension or path qualifier, then CMD is replaced with the value of the COMSPEC variable. This prevents picking up CMD.EXE from the current directory.

When executing a command line whose first token does NOT contain an extension, then CMD.EXE uses the value of the COMSPEC environment variable. This prevents picking up CMD.EXE from the current directory.

When executing a command line whose first token does NOT contain an extension, then CMD.EXE uses the value of the PATHEXT environment variable to determine which extensions to look for and in what order. The default value for the PATHEXT variable is: .COM;.EXE;.BAT;.CMD Notice the syntax is the same as the PATH variable, with semicolons separating the different elements.

When searching for an executable, if there is no match on any extension, then looks to see if the name matches a directory name. If it does, the START command launches the Explorer on that path. If done from the command line, it is the equivalent to doing a CD /D to that path.

Errorlevels

If the command is successfully started ERRORLEVEL =unchanged, typically this will be 0 but if a previous command set an errorlevel, that will be preserved (this is a bug).
If the command fails to start then ERRORLEVEL = 9059
START /WAIT batch_file – will return the ERRORLEVEL specified by EXIT

Examples

Run a minimised Login script:
START "My Login Script" /Min Login.cmd

Start a program and wait for it to complete before continuing:
START "" /wait autocad.exe

Open a file with a particular program:
START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\Docs\demo.txt"

Open Windows Explorer and list the files in the current folder (.) :
C:\any\old\directory> START .

Connect to a new printer: (this will setup the print connection/driver )
START \\print_server\printer_name

Start an application and specify where files will be saved (Working Directory):
START /D C:\Documents\ /MAX "Maximised Notes" notepad.exe

START is an internal command.


I’m trying to create a script to execute an exe on shutdown in order to install sp1. my script goes something like (not actual bat script).

If installed GOTO END
    Install.exe
END:

Is there any way to tell it to wait until the process it started completes and then shutdown?

JeffG's user avatar

6 silver badges18 bronze badges

asked Mar 9, 2011 at 20:46

Kravlin's user avatar

START /WAIT Install.exe

answered Mar 9, 2011 at 20:54

Bart De Vos's user avatar

Bart De VosBart De Vos

6 gold badges63 silver badges82 bronze badges

One shorter way:

Install.exe|more
install|rem

could be used , though with more eventually you’ll be able to catch some console output. And this is the reason it works – the piped command waits for input until the .exe is finished.

For windows 8 and 10 there’s a new tool coming with windows called scriptrunner which also can be used for this purpose:

ScriptRunner.exe -appvscript Install.exe -appvscriptrunnerparameters -wait

answered Oct 22, 2015 at 12:34

npocmaka's user avatar

5 silver badges6 bronze badges

Either calling the exe directly from the batch file, or using start /wait will work but there is a caveat.

If the exe you call then creates other process, such as calling another exe, and then exits the batch file will continue processing after the called exe has terminated, as it has no knowledge of other processes started by it.

In your case this is a real problem because installers normally extract files from some form of compressed container, which may be embedded in the exe itself, then fire off one of the extracted files and exit. Some installers provide command line parameters which tell the original exe not to exit until the entire installation is complete, so that’s something you may want to investigate. Other than that, there’s no real way around this with batch files alone and would take a programmatic solution to solve.

answered Mar 9, 2011 at 21:25

John Gardeniers's user avatar

John Gardeniers

12 gold badges54 silver badges109 bronze badges

echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit

answered Jun 19, 2014 at 12:46

Rachit Kumar's user avatar

TIMEOUT /T 60

SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
goto FIN
:FOUND
TIMEOUT /T 30
goto LOOPSTART
:FIN

answered Mar 15, 2018 at 2:21

FreeSoftwareServers's user avatar

SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
TIMEOUT /T 3
goto LOOPSTART
:FOUND
TIMEOUT /T 15
START HOOKINGPROGRAM.exe

The first TIMEOUT determines how often the loop will repeat, searching for the program. This can be modified to fit your needs.

Glorfindel's user avatar

4 gold badges15 silver badges22 bronze badges

answered Aug 28, 2020 at 3:23

WildcatDan's user avatar

You can use the the start /wait command. This starts an application and waits for it to end.

Or if you know how long it takes to execute, you can take a look at the sleep command, provided by the Windows Server 2003 Resource Kit Tools . Sleep.exe can be used to pause your batch for any number of seconds to allow the program to install fully before the batch file proceeds to install anything else. There are some programs which ignore the “start /wait” syntax, due to the program itself launching another process, then the sleep.exe is very useful.

answered Mar 9, 2011 at 21:03

Guido van Brakel's user avatar

Оставьте комментарий