Запуск файла .bat в запланированной задаче без окна

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

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

  cmd /c start /min mybat.bat
 

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

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

138 голосов | спросил Tom Dunham 17 Maypm09 2009, 13:00:51

11 ответов


141

Вместо этого вы можете запустить его с помощью файла сценария Windows. Метод Run позволяет запускать скрипт в невидимом режиме. Создайте файл .vbs , подобный этому

  Dim WinScriptHost
Установить WinScriptHost = CreateObject ("WScript.Shell")
WinScriptHost.Run Chr (34) & amp; «C: \ Запланированные задания \ mybat.bat» & amp; Chr (34), 0
Установить WinScriptHost = Nothing
 

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

Полный синтаксис метода запуска :

  object.Run (strCommand, [intWindowStyle], [bWaitOnReturn])
 

Аргументы:

  • объект: объект WshShell.
  • strCommand: Строковое значение, указывающее командную строку, которую вы хотите запустить. Вы должны указать любые параметры, которые хотите передать исполняемому файлу.
  • intWindowStyle: необязательно. Целое значение, указывающее внешний вид окна программы. Обратите внимание, что не все программы используют эту информацию.
  • bWaitOnReturn: Необязательно. Логическое значение, указывающее, должен ли сценарий ждать завершения программы, прежде чем перейти к следующему утверждению в вашем скрипте. Если установлено значение true, выполнение скрипта останавливается до завершения программы, а Run возвращает код ошибки, возвращаемый программой. Если установлено значение false (по умолчанию), метод запуска возвращается сразу после запуска программы, автоматически возвращается 0 (чтобы не интерпретироваться как код ошибки).
ответил splattne 17 Maypm09 2009, 13:08:16
55

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

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

JR

ответил John Rennie 17 Maypm09 2009, 13:13:51
27

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

ответил Peter Meinl 5 +04002012-10-05T00:06:36+04:00312012bEurope/MoscowFri, 05 Oct 2012 00:06:36 +0400 2012, 00:06:36
17

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

  

CHP.EXE mybat.bat

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

ответил rocketmonkeys 21 J000000Wednesday10 2010, 01:54:28
9

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

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

  cmdow @ /hid
 

или запустите новый скрытый процесс с помощью

  cmdow /run /hid mybat.bat
 
ответил itsadok 17 Maypm09 2009, 15:30:26
5

Попробуйте запустить скрипт с помощью

  start /b <command>
 
ответил 17 Maypm09 2009, 18:54:29
5

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

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

ответил Doug Kavendek 11 PM00000080000004531 2011, 20:49:45
1

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

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

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

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

  c: \ path \ to \ nircmd.exe exec hide "c: \ path \ to \ mybat.bat"
 

В разделе exec Ссылка на команду NirCmd :

  exec [show /hide /min /max] [application + command-line]
 

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

<сильный> EDIT: Я пытался запустить задание ROBOCOPY и попробовал метод в этом ответе, и он не работал даже после редактирования прав доступа к сети. Я попытался дважды щелкнуть по сценарию и не смог заставить его работать, но мог заставить его работать только в командной строке с повышенными правами. Я создал ярлык для командного файла и запустил его как Администратор и смог его выполнить, дважды щелкнув по нему, но метод, с которым я закончил работу, заключался в том, чтобы скрыть его как SYSTEM (я знаю, я знаю) - но он работает с ROBOCOPY , для чего он стоит, если командный файл имеет правильные разрешения.

ИЗМЕНИТЬ 2: По какой-то причине он не будет работать как SYSTEM (возможно, ссылка на доступ к сети, ссылка на которую была ранее) - я заметил это только после выполнения ROBOCOPY без флага /L, который в основном представляет собой симуляцию и [ очевидно] фактически не подключается к удаленной системе, но когда я запускаю командный файл с наивысшими привилегиями и проверяю скрытое поле, и я все еще могу запустить его как зарегистрированный пользователь в фоновом режиме без окна команд, показывающего, для чего это стоит кому угодно.

ответил rubynorails 1 Mayam16 2016, 06:38:50
0

Другим решением, которое я использовал, является Скрытый старт

ответил SteveC 1 J000000Wednesday15 2015, 10:38:46
-2

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

ответил Brian S. Wilson 13 PM00000030000004631 2013, 15:58:46
-2

Чтобы скрыть вывод (хотя и не окно), добавьте это в начало вашего пакетного файла:

  @echo off
 
ответил voidstate 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 01 Sep 2015 19:01:27 +0300 2015, 19:01:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132