Как скрыть окно cmd при работе bat файла

Обновлено: 03.07.2024

У меня есть запланированное задание, которое запускает пакетный скрипт, который запускается robocopy каждый час. Каждый раз, когда он запускается, на рабочем столе появляется окно с выводом robocopy, которое я не очень хочу видеть.

Мне удалось заставить окно выглядеть свернутым, запустив запланированное задание

но это дает мне новое окно команд каждый час. Я был удивлен этим, учитывая cmd /c «Выполняет команду, указанную в строке, а затем завершается» - я, должно быть, неправильно понял документы.

Есть ли способ запустить пакетный скрипт без его появления окна cmd?

и запланировать это. Второй аргумент в этом примере устанавливает стиль окна. 0 означает «скрыть окно».

Аргументы:

  • объект: объект WshShell.
  • strCommand: строковое значение, обозначающее командную строку, которую вы хотите запустить. Вы должны включить любые параметры, которые хотите передать в исполняемый файл.
  • intWindowStyle: Необязательно. Целочисленное значение, указывающее внешний вид окна программы. Обратите внимание, что не все программы используют эту информацию.
  • bWaitOnReturn: необязательно. Логическое значение, указывающее, должен ли скрипт ждать завершения программы, прежде чем перейти к следующему оператору в вашем скрипте. Если установлено значение true, выполнение сценария останавливается до завершения программы, и Run возвращает любой код ошибки, возвращенный программой. Если установлено значение false (по умолчанию), метод Run возвращается сразу после запуска программы, автоматически возвращая 0 (не следует интерпретировать как код ошибки).
Я видел это, прежде чем вы удалили его. Я думаю, что мы оба боты. ;-) username, честно говоря, я думаю, что Сэм заслуживает этого гораздо больше, чем я. Но все равно спасибо! И не упоминай меня и Джона Скита в одном предложении. Это богохульство! ;-) На вопрос «Есть ли способ запустить пакетный скрипт, не открывая окно cmd?», Он дает очень прямой ответ: запустите его, используя файл Windows Script. @ Ли, я думаю, двойные кавычки необходимы, если ваш путь содержит пробелы.

Вы запускаете это как запланированное задание? Если это так, установите его для запуска под другой учетной записью пользователя, тогда он не будет виден вошедшему в систему пользователю. Если сценарию не нужен сетевой доступ к элементам, для которых требуется проверка подлинности Windows (например, к общим папкам или принтерам), вы можете запустить его как «nt полномочия \ система» и оставить пароль пустым. В Windows 7 просто установите для пользователя значение SYSTEM и нажмите ОК.

(Вы, вероятно, должны использовать реального пользователя, хотя, если вы используете robocopy . )

Спасибо - это было меньше хлопот для меня, чем вариант .vbs. Я установил для пользователя «Запуск от имени» значение «СИСТЕМА» (которое впоследствии изменилось на «NT AUTHORITY \ SYSTEM»), и это сработало для меня. Я больше не вижу всплывающее окно CMD при выполнении запланированной задачи. Спасибо! +1, это элегантно. Обязательно введите «system» в качестве имени пользователя, тогда win7 сделает все остальное за вас. Обратите внимание, что вы действительно получаете сетевой доступ к Интернету, а не к сетевым ресурсам и тому, что требует аутентификации Windows. Пользователь системы прост и элегантен, отличный СОВЕТ! +1! См. Реализация административных моделей с наименьшими привилегиями . Является ли использование Системной учетной записи нарушением политик с наименьшими привилегиями? Если это так, то администраторы должны знать, чтобы не делать этого в большинстве ситуаций.

Просто настройте запланированную задачу как «Запускать, вошел ли пользователь в систему или нет».

Отлично! Вы даже можете отключить хранилище учетных данных, и тогда это станет более безопасным, чем запуск системы SYSTEM!

Вы также можете попробовать CHP (Создать скрытый процесс) , который делает именно то, что вы думаете .

Запускается без командного окна. Отлично! Сделано теми же людьми, что и CMDOW, но это более уместно.

Прекрасно работает, когда вам нужно запустить задачу в контексте вошедшего в систему пользователя («Триггер: при подключении к сеансу пользователя», «Запускать задачу как: пользователи»)

CMDOW - это потрясающий инструмент, который позволяет вам делать множество вещей с окнами из командной строки.

Одна из самых простых вещей - скрыть текущее окно (обычно как первую строку в файле bat) с помощью:

или начать новый скрытый процесс с

И это, и предложение Rocketmonkeys предполагают загрузку новых инструментов, что означает большую совместимость с настольными компьютерами разных людей. Запекать, используя команды Windows, гораздо лучше. Плюс cmdow определяется как «опасный» некоторыми антивирусными программами (это не опасно, но само обнаружение может вызвать некоторые проблемы, если файл cmdow помещен на карантин . ). есть еще всплывающая консоль, просто прошить очень быстро.

Попробуйте вызвать скрипт с

Это не работает, «Запланированная задача» -> «Состояние» означает «Не удалось запустить», то есть: start / b C: \ file.bat: и: start / b «C: \ file.bat»: но: C: \ file.bat: работает просто отлично. Потому что start это не программа, это команда. Вам нужно указать cmd как программу для запуска и /c start /b <file> как аргумент. Тем не менее, это все равно не сработает, потому что оно все равно создаст консольное окно cmd и высветит черное окно на экране. Можно также подтвердить с помощью @Synetech, что это не создаст новое окно, но вам все равно нужно открыть консольное окно, чтобы запустить его. Это действительно удобная команда, но ее нельзя использовать в соответствии с запросом запланированных задач.

Вы можете создать ярлык для командного файла, установить ярлык для запуска свернутым (в свойствах ярлыка, вкладка «Ярлык»), а затем настроить задание для запуска ярлыка.

Важное замечание : Вам необходимо указать путь к ярлыку вручную, введя его в текстовое поле «Выполнить» с расширением «.lnk»; если вы просто попытаетесь перейти к нему, он услужливо перенаправит себя к тому, на что указывает ярлык.

Это не работает на Windows 10 x64, это дает всплывающее окно "Как вы хотите открыть этот файл?"

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

Я также хотел сказать, что я не согласен с комментарием @ splattne (но не с его реальным ответом) - что разрешение в другой упомянутой теме заслуживает доверия. Этот ответ включает запуск сценария от имени другого пользователя (SYSTEM), что в значительной степени эквивалентно предоставлению корневого доступа сценария. Это также не удастся для заданий, таких как ROBOCOPY (на что ссылается Джон Ренни), которые требуют доступа к сети.

Я никогда CMDOW раньше не пробовал , но я хотел бы предложить другое подобное разрешение, которое [хотя и не установлено в Windows], по-прежнему легко переносимо для большинства версий и поставляется как в 32-, так и в 64-битных версиях, и это NirCmd .

NirCmd - очень мощный инструмент, имеющий множество опций, наиболее полезной из которых я лично считаю, что он способен запускать скрытые командные окна, просто выполняя следующее:

Запускает приложение и, при необходимости, указывает один или несколько параметров командной строки для исполняемого приложения. Параметр [show / hide / min / max] указывает, будет ли запущенное приложение видимым или нет. Если указано «скрыть», запущенное приложение не будет видимо пользователю. Если указано «max», окно запущенного приложения будет развернуто. Если указано «min», окно запущенного приложения будет свернуто.

РЕДАКТИРОВАТЬ: я пытался запустить ROBOCOPY задание и попробовал метод в этом ответе, и он не работал, даже после редактирования прав доступа к сети. Я попытался дважды щелкнуть сценарий и не смог заставить его работать, но смог запустить его только в командной строке с повышенными привилегиями. Я создал ярлык для командного файла и запустил его от имени администратора и смог запустить его, дважды щелкнув по нему, но метод, который я использовал, заключался в том, чтобы запустить его скрытым как SYSTEM (я знаю, я знаю) - но он действительно работает ROBOCOPY , если он имеет правильные права доступа к пакетному файлу.

Пакетные файлы (.BAT) и файлы командного сценария Windows NT (.CMD) запускаются в окне консоли при двойном щелчке. Это означает, что окно командной строки будет отображаться до тех пор, пока не завершится выполнение файла .BAT или .CMD.

запускать пакетный файл в скрытом или невидимом режиме

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

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

  1. Запустите пакетный или CMD-файл в режиме свернутого окна
  2. Запустить пакетный или CMD-файл скрытым (невидимый режим) через Windows Script
  3. Запустите скрытый пакетный или CMD-файл (невидимый режим) с помощью утилиты NirCmd

Запуск файлов .BAT или .CMD в свернутом режиме

Чтобы запустить пакетный файл в свернутом состоянии окна, выполните следующие действия:

Запуск скрытых файлов .BAT или .CMD (невидимый режим) с помощью скрипта

Метод запуска Windows Script Host позволяет запускать программу или сценарий в невидимом режиме. Вот пример кода сценария Windows, который запускает командный файл с именем syncfiles.bat невидимо.

Ссылка: метод запуска. Установка параметра intWindowStyle в 0 скрывает окно.

Допустим, у нас есть файл с именем syncfiles.bat в C:\Batch Files каталог. Давайте запустим его в скрытом режиме, используя Windows Scripting.

    Скопируйте следующие строки в Блокнот.

Заметка: Замените имя / путь пакетного файла соответственно в сценарии в соответствии с вашими требованиями.

СВЯЗАННЫЙ: Как автоматически поднять пакетный файл, чтобы запустить его от имени администратора? и VBScripts и повышение прав UAC (запуск от имени администратора)

Запуск скрытых файлов .BAT или .CMD (невидимый режим) с помощью NirCmd

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

Загрузите NirCmd и распакуйте файл в каталог Windows.

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

Пример:

запустить пакетный файл скрытый - nircmd exec

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

Это оно! Если вам известен какой-либо другой способ запуска пакетного или CMD-файла в скрытом режиме, сообщите нам об этом.

Если вы хоть раз просматривали внушительный список возможностей утилиты NIRCMD, то скорее всего задались вопросом - а она это может ? Да, может. Я уже упоминал эту утилиту не раз.
(Несмотря на то, что эта утилита все-таки "комбайн" или, говоря рекламным языком - все в одном, текущая ее версия занимает менее 45К ! Только за одно это хочется снять шляпу перед ее авторами. И все эти килобайты - бесплатно).
Итак, для того, что бы сделать консольное окно невидимым следует записать:

Вы можете передавать параметры в ваш bat/cmd файл или программу как привыкли.

Для выполнения приложения ( кстати, не только bat/cmd файлов ) без отображения консольного окна вместо execmd можно использовать другой параметр этой утилиты:

Утилита hidec.

( Домашней страницы не нашел, лучше поэтому искать поиском по ключу hidec.exe )

Ключ /w запускает приложение с ожиданием окончания его работы.


Существуют еще платные (например, Hidden Start - Hstart) и бесплатные (например, chp.exe -Create Hidden Process, cmdow) утилиты, позволяющие скрыть консольное окно. Здесь я не пытался сделать обзор и сравнительный анализ всех различных вариантов решения этой проблемы. Тем более, что для решения конкретной задачи - скрыть консольное окно для bat/cmd файлов - различия утилит, как мне кажется, не выходят за рамки личных предпочтений.

Кроме того существует возможность сделать это фактически не используя сторонних утилит.

Файл, с кодом, приведенным ниже и с расширением vbs если его выполнить непосредственно или командой CSCRIPT запустит в данном случае блокнот в скрытом окне. Открыв окно Диспетчера задач можно увидеть, что такой процесс действительно запущен.

Set WshShell = WScript.CreateObject("WScript.Shell") Return = WshShell.Run("notepad", 0, true)

Параметры объекта RUN можно посмотреть здесь

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

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Новый раздел о средствах командной строки в рамках этого же проекта расположен здесь

Иногда есть необходимость запустить файл bat в невидимом режиме, спрятать, скрыть окно bat. Например если файл выполняется через планировщик. А может быть там написано много команд и долго выполняется, при этом мелькает у Вас перед глазами. Примеров, для чего нужно скрыть окно bat файла можно привести множество. Так что если Вас заинтересовало, как скрыть окно cmd или как скрытно запустить программу, читайте внимательно.

Предлагаю ознакомиться с предложениями моих партнёров

1. С помощью скрипта vbs. Вот таким скриптом можно скрытно запускать программы, bat файлы, другие файлы.

Пример: скрытно запускаем батник qwerty.bat с диска С

Можно в скрытом режиме запускать не только *.bat но и другие файлы. Например, Вы желаете запустить mp3 без окна проигрывателя, при условии использования Windows Media Player

Если у Вас mp3 привязан к другому проигрывателю, то добавьте в код wmplayer.exe

2. Утилита cmdow ( саму утилиту поместить в C:windowssystem32 )

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

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

Если написать в середине, то окно будет скрыто позже, после обработки команд предшествующих cmdow @ /HID.

В статье описываются различные способы того, как спрятать окно cmd во время исполнения batch файла.

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

Как миновать защиту UAC? Обратитесь к статье Как обойти UAC в Windows

Как спрятать окно cmd. Можно ли это сделать средствами самого батника?

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

Запустить batch файл незаметно. Только Windows.

В самом файле “безумству кода” вы пойте песню сами. Я же предложу оптимизировать его содержание для максимально тихой работы. Здесь есть важный момент: чем короче сам код, тем больше вероятность того, что окно консоли появится на короткое время. Если объём большой или прописывается сразу несколько команд, окно может привлечь внимание.

Для примера возьму код скрипта, который позволяет немного изменить системную информацию о компьютере (конкретно, характеристики процессора в Свойствах системы ). Делается это на время сеанса Windows: после перезагрузки всё станет на свои места.

Вобщем, имеем следующий код батника:

Обратите внимание на характеристики процессора . Он и будет отвечать за изменение системной информации. Присваиваем файлу имя spec . bat . Также обратите внимание, я буду использовать только латинские символы в именах файлов и избегать в путях к их месторасположению кириллицы, дабы дорожка к скрипту читались системой правильно. Потому и положу созданный бат-файл в системную директорию – прямо в диск С: .

bat файл в скрытом режиме

Однако его запуск сопровождается:

  • появлением окна консоли cmd
  • появлением окна UAC с подтверждением с проделываемыми изменениями (задача, как видите, усложнилась сама по себе, ибо меняется системная информация)

bat файл в скрытом режиме

перед исполнением батника появляется окно UAC

От первого окошка я предлагаю вам избавиться с помощью следующего скрипта, оформленного уже в очередной, vbs-файл . А вот и к нему скрипт (смотрите – мой путь к файлу C:spec.bat ):

Назову любым именем с расширением .vbs . Теперь работа батника по нажатии на vbs -ник сопровождается лишь появлением окна Контроля учётных записей : дело в том, что изменения, проделываемые батником касаются реестра, а система логично не пропускает это бесконтрольно. Как запускать программу без UAC – это тема отдельной статьи:

bat файл в скрытом режиме

Однако мы немного отвлечёмся от темы статьи и закончим начатое, создав для файла сокрытия консоли (vbs-файла) специальный ярлык. В поле Расположения объекта укажем путь в формате:

Смотрите:

bat файл в скрытом режиме

Ярлык готов (можете сменить его рисунок через Свойства ярлыка). Его можно закинуть на выбор в папку Автозагрузки, поместить в Планировщик Windows или запускать двойным щелчком мыши. Окна консоли не будет.

Как спрятать окно cmd? Специальные программы.

Их немало, они легковесны и просты в использовании. Минус – их нужно скачивать, и некоторые устанавливать. Приведу самые популярные из них:

Утилита отечественного производителя. Нужно покупать, стоимости не знаю. Однако с её помощью можно скрыть окно раз и навсегда, и не важно, требуется ли подтверждение UAC или нет – его тоже можно скрыть:

bat файл в скрытом режиме

Для 32-х и 64-х битных версий. Установки не требует, поставляется в виде исполнительного файла, который при запуске (от имени админа) сразу просится в корневой каталог Windows. Согласимся, и она теперь с нами:

bat файл в скрытом режиме

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

От окна UAC не избавились (elevatecmd exec и есть часть команды с запросом на UAC), но нам и не обещалось. И постоянно прописывать в консоли полный путь к файлу неудобно, потому сразу создадим ярлык:

bat файл в скрытом режиме

Как спрятать окно cmd: batch превратился в exe.

Тоже вариант. Это уже музыка высших сфер. Кому эта утилита неизвестна, знакомьтесь – пригодится: Bat To Exe Converter . Как вы поняли по названию, превращает батник в исполнительный файл с расширением .exe. Качаем, устанавливаем, пользуемся:

bat файл в скрытом режиме

Успехов.

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

Вы можете скрыть вывод выполняемых в консоли команд, добавив в начало файла CMD или BAT строчку @echo off, но чтобы сделать невидимым окно самой командной строки, потребуется нечто иное.

bat файл в скрытом режиме

Решение очень простое. Чтобы скрыть исполнение CMD- или BAT-файла, мы прибегнем к помощи другого скрипта, написанного на языке Visual Basic Script.

Откройте Блокнот, Notepad++ или другой текстовый редактор, скопируйте и вставьте в него следующий код:

В данном примере путь к файлу командной строки выглядит как C:script.cmd, у вас же он может быть другим. Сохраните файл, дав ему произвольное имя и обязательное расширение VBS. Обратите внимание — кавычки в коде должны быть прямыми, иначе при запуске скрипта получите ошибку.

bat файл в скрытом режиме

Когда вам нужно будет выполнить файл командной строки, запустите VBS-скрипт, а он в свою очередь запустит ваш «батник», который выполнится в скрытом режиме. Столь раздражающего вас чёрного окна командной строки вы больше не увидите.

Наверное, кто-то из наших читателей спросит: а для чего все эти сложности? Неужели то, что делает файл CMD, не может сделать VBS? Может, просто язык Visual Basic Script знают весьма немногие, а с командной строкой более или менее хорошо знакомы все, кто считает себя продвинутым пользователем.

Читайте также: