У меня есть запланированное задание, которое запускает пакетный скрипт, который запускается robocopy
каждый час. Каждый раз, когда он запускается, на рабочем столе появляется окно с выводом robocopy, которое я не очень хочу видеть.
Мне удалось заставить окно выглядеть свернутым, запустив запланированное задание
cmd /c start /min mybat.bat
но это дает мне новое окно команд каждый час. Я был удивлен этим, учитывая cmd /c
"Выполняет команду, указанную в строке, а затем завершается" - я, должно быть, неправильно понял документы.
Есть ли способ запустить пакетный скрипт без его появления окна cmd?
Вы можете запустить его без вывода сообщений, используя файл сценария Windows. Метод Run позволяет запускать скрипт в невидимом режиме. Создать .vbs
файл, как этот
Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing
и наметить это. Второй аргумент в этом примере устанавливает стиль окна. 0 означает "скрыть окно".
Полный синтаксис метод Run :
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
Аргументы:
Вы запускаете это как запланированное задание? Если это так, установите его для запуска под другой учетной записью пользователя, тогда он не будет виден вошедшему в систему пользователю. Если сценарию не нужен сетевой доступ к элементам, для которых требуется проверка подлинности Windows (например, к общим папкам или принтерам), вы можете запустить его как "nt полномочия\система" и оставить пароль пустым. В Windows 7 просто установите для пользователя значение SYSTEM и нажмите ОК.
(Возможно, вам придется использовать настоящего пользователя, если вы используете robocopy ...)
JR
Просто настройте запланированную задачу как "Запускать, вошел ли пользователь в систему или нет".
Вы также можете попробовать CHP (Создать скрытый процесс) , делает именно то, что вы думаете ...
CHP.EXE mybat.bat
Запускается без командного окна. Отлично! Сделано теми же людьми, что и CMDOW, но это более уместно.
CMDOW - это потрясающий инструмент, который позволяет вам делать много, много вещей с окнами из командной строки.
Одна из самых простых вещей - скрыть текущее окно (обычно как первую строку в файле bat) с помощью:
cmdow @ /hid
или начать новый скрытый процесс с
cmdow /run /hid mybat.bat
Попробуйте вызвать скрипт с
start /b <command>
Вы можете создать ярлык для командного файла, установить ярлык для запуска свернутым (в свойствах ярлыка, вкладка "Ярлык"), а затем настроить задание для запуска ярлыка.
Важно: вам нужно будет указать путь к ярлыку вручную, введя его в текстовое поле "Выполнить" с расширением ".lnk"; если вы просто попытаетесь перейти к нему, он услужливо перенаправит себя на то, на что указывает ярлык.
Я понимаю, что на этот вопрос уже было дано достаточно хорошее разрешение, которое является родным для 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] указывает, будет ли запущенное приложение видимым или нет. Если указано "скрыть", запущенное приложение не будет видимо пользователю. Если указано "max", окно запущенного приложения будет развернуто. Если указано "min", окно запущенного приложения будет свернуто.
РЕДАКТИРОВАТЬ: Я пытался запустить задание ROBOCOPY
и попробовал метод в этом ответе, но он не работал даже после редактирования привилегии доступа к сети. Я попытался дважды щелкнуть сценарий и не смог заставить его работать, но смог запустить его только под повышенным уровнем командной строки. Я создал ярлык для командного файла и запустил его от имени администратора и смог запустить его, дважды щелкнув по нему, но метод, который я использовал, заключался в том, чтобы запустить его скрытым как SYSTEM (я знаю, я знаю) - но он действительно работает с ROBOCOPY
, чего бы это ни стоило, если пакетный файл имеет правильные разрешения.
РЕДАКТИРОВАТЬ 2: По какой-то причине он не будет работать как СИСТЕМА (возможно, вещь о доступе к сети, на которую ссылались ранее) - я заметил это только после фактического запуска ROBOCOPY
без флага/L, который по сути является просто симуляцией и [по-видимому] фактически не подключается к удаленной системе, но когда я запускаю командный файл с наивысшими привилегиями и отмечаю скрытое поле, я могу по-прежнему запускайте его как зарегистрированного пользователя в фоновом режиме без отображения командного окна, для чего бы это ни стоило никому.
Другое решение, которое я использовал, --- Скрытый старт