Скрыть командное окно .BAT файла, выполняющего другой .EXE файл
Это пакетный файл в Windows.
Вот мой .bat файл
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
"C:\ThirdParty.exe"
Это отлично работает, за исключением того, что .bat файл оставляет окно команды открытым все время, когда запущено приложение "ThirdParty".
Мне нужно закрыть окно команд.
Я бы воспользовался сокращением для приложения, но я должен сначала запустить эту команду копирования (она фактически изменяет базу данных и сервер для использования в приложении).
Приложение ThirdParty не позволяет пользователю изменять источник db или сервера приложений.
Мы делаем это, чтобы пользователи могли перейти от тестовой среды к рабочей среде.
Ответы
Ответ 1
Использование start
работает для меня:
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
EDIT: Хорошо, более внимательно, start
, кажется, интерпретирует первый параметр как новый заголовок окна, если он указан. Итак, если вам нужно указать путь к вашему третьему файлу ThirdParty.exe, вы также должны указать строку заголовка.
Примеры:
:: Title not needed:
start C:\ThirdParty.exe
:: Title needed
start "Third Party App" "C:\Program Files\Vendor\ThirdParty.exe"
Ответ 2
Создайте файл .vbs
с этим кодом:
CreateObject("Wscript.Shell").Run "your_batch.bat",0,True
Этот .vbs
будет запускать your_batch.bat
скрытым.
У меня отлично работает.
Ответ 3
Попробуйте следующее:
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
exit
Ответ 4
Отличный совет. Он работает с пакетными файлами, в которых также запущена программа java.
start javaw -classpath "%CP%" main.Main
Ответ 5
Использование start
отлично работает, если вы не используете язык сценариев. К счастью, есть выход для Python - просто используйте pythonw.exe
вместо python.exe
:
:: Title not needed:
start pythonw.exe application.py
Если вам нужны кавычки, сделайте следующее:
:: Title needed
start "Great Python App" pythonw.exe "C:\Program Files\Vendor\App\application.py"
Ответ 6
Я действительно не нашел хороший способ сделать это изначально, поэтому я просто использую утилиту hstart, которая делает это для меня. Если есть более аккуратный способ сделать это, это будет хорошо.
Ответ 7
Вам может быть интересно попробовать мою программу silentbatch, которая будет запускать .bat
/.cmd
script, подавлять полностью создать окно командной строки (так что вы не увидите его, а затем исчезнете) и, при желании, запишите вывод в указанный файл.
Ответ 8
Вы можете создать скрипт VBS, который заставит окно быть скрытым.
Set WshShell = WScript.CreateObject("WScript.Shell")
obj = WshShell.Run("""C:\Program Files (x86)\McKesson\HRS
Distributed\SwE.bat""", 0)
set WshShell = Nothing
Затем вместо выполнения командного файла выполните сценарий.
Ответ 9
Скомпилируйте командный файл в исполняемый файл, используя Batch2Exe http://www.f2ko.de/programs.php?lang=en&pid=b2e.
Используйте опцию "Невидимое окно".
Ответ 10
Или вы можете использовать:
Start /d "the directory of the executable" /b "the name of the executable" "parameters of the executable" %1
Если% 1 - это файл, то он передается в ваш исполняемый файл. Например, в notepad.exe foo.txt
% 1 - это "foo.txt".
Параметр /b
команды запуска делает это:
Запускает приложение, не открывая новое окно командной строки. Обработка CTRL + C игнорируется, если только приложение не разрешает обработку CTRL + C. Используйте CTRL + BREAK, чтобы прервать приложение.
Что именно то, что мы хотим.
Ответ 11
Пожалуйста, используйте этот, выше не работает. Я тестировал в Window Server 2003.
@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
Start /I "" "C:\ThirdParty.exe"
exit
Ответ 12
запустить его под другим пользователем. предполагая, что это окно, создайте учетную запись пользователя для запланированных задач. запустите его как этого пользователя. Командная строка будет отображаться только для пользователя, который в настоящий момент вошел в систему.
Ответ 13
Чтобы командное окно файла .bat, который выполняет файл .exe, завершилось как можно быстрее, используйте строку @start
перед файлом, который вы пытаетесь выполнить. Вот пример:
(insert other code here)
@start executable.exe
(insert other code here)
Вам не нужно использовать другой код с @start executable.exe
.
Ответ 14
Я использовал это для запуска cmd файла из С#:
Process proc = new Process();
proc.StartInfo.WorkingDirectory = "myWorkingDirectory";
proc.StartInfo.FileName = "myFileName.cmd";
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForExit();
Ответ 15
Используя Windows API, мы можем запустить новый процесс, консольное приложение, и скрыть его "черное" окно. Это можно сделать при создании процесса и вообще не показывать "черное" окно.
В CreateProcess функционируют также dwCreationFlags
параметр может иметь CREATE_NO_WINDOW флаг:
The process is a console application that is being run
without a console window. Therefore, the console handle
for the application is not set. This flag is ignored if
the application is not a console application
Вот ссылка на исполняемый файл hide-win32-console-window, использующий этот метод и исходный код.
hide-win32-console-window
аналогичен программе установки без вывода сообщений Jamesdlin.
Возникает открытый вопрос: что делать с выводом программы, когда ее окно не существует? Что делать, если случаются исключения? Не очень хорошее решение, чтобы выбросить результаты. hide-win32-console-window
использует анонимные каналы для перенаправления вывода программы в файл, созданный в текущем каталоге.
использование
batchscript_starter.exe full/path/to/application [аргументы для передачи]
Пример запуска скрипта Python
batchscript_starter.exe c:\Python27\python.exe -c "import time; print('prog start'); time.sleep(3.0); print('prog end');"
Выходной файл создается в рабочем каталоге с именем python.2019-05-13-13-32-39.log
с выводом из команды python:
prog start
prog end
Пример работающей команды
batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C dir .
Выходной файл создается в рабочем каталоге с именем cmd.2019-05-13-13-37-28.log
с выводом из CMD:
Volume in drive Z is Storage
Volume Serial Number is XXXX-YYYY
Directory of hide_console_project\hide-win32-console-window
2019-05-13 13:37 <DIR> .
2019-05-13 13:37 <DIR> ..
2019-05-13 04:41 17,274 batchscript_starter.cpp
2018-04-10 01:08 46,227 batchscript_starter.ico
2019-05-12 11:27 7,042 batchscript_starter.rc
2019-05-12 11:27 1,451 batchscript_starter.sln
2019-05-12 21:51 8,943 batchscript_starter.vcxproj
2019-05-12 21:51 1,664 batchscript_starter.vcxproj.filters
2019-05-13 03:38 1,736 batchscript_starter.vcxproj.user
2019-05-13 13:37 0 cmd.2019-05-13-13-37-28.log
2019-05-13 04:34 1,518 LICENSE
2019-05-13 13:32 22 python.2019-05-13-13-32-39.log
2019-05-13 04:55 82 README.md
2019-05-13 04:44 1,562 Resource.h
2018-04-10 01:08 46,227 small.ico
2019-05-13 04:44 630 targetver.h
2019-05-13 04:57 <DIR> x64
14 File(s) 134,378 bytes
3 Dir(s) ???,???,692,992 bytes free
Пример ярлыка для запуска скрипта .bat
![Shortcut for starting windowless .bat file]()
Target
поле:
C:\batchscript_starter.exe C:\WINDOWS\system32\cmd.exe /C C:\start_wiki.bat
Каталог, указанный в поле " Start in
будет содержать выходные файлы.