Скрыть командное окно .BAT-файла, который выполняет другой .EXE-файл - PullRequest
52 голосов
/ 03 февраля 2009

Это командный файл в Windows.

Вот мой .bat файл

@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"

"C:\ThirdParty.exe"

Это работает нормально, за исключением того, что .bat-файл оставляет командное окно открытым все время, пока работает приложение ThirdParty.
Мне нужно командное окно, чтобы закрыть.

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

Приложение ThirdParty не позволяет пользователю изменять источник БД или сервера приложений.

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

Ответы [ 15 ]

42 голосов
/ 03 февраля 2009

Использование start работает для меня:

@echo off
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe

РЕДАКТИРОВАТЬ: Хорошо, если присмотреться, start, кажется, интерпретирует первый параметр как новый заголовок окна, если он указан. Поэтому, если вам нужно указать путь к файлу ThirdParty.exe, вы также должны указать строку заголовка.

Примеры:

:: Title not needed:
start C:\ThirdParty.exe

:: Title needed
start "Third Party App" "C:\Program Files\Vendor\ThirdParty.exe"
20 голосов
/ 18 ноября 2013

Создайте файл .vbs с этим кодом:

CreateObject ("Wscript.Shell"). Запустите "your_batch.bat", 0, True

Этот .vbs будет запускаться your_batch.bat скрыт.

У меня отлично работает.

9 голосов
/ 03 февраля 2009

Попробуйте это:

@echo off 
copy "C:\Remoting.config-Training" "C:\Remoting.config"
start C:\ThirdParty.exe
exit
7 голосов
/ 06 января 2011

Отличный совет. Он работает с пакетными файлами, которые также работают с Java-программой.

start javaw -classpath "%CP%" main.Main
6 голосов
/ 24 августа 2009

Использование 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"
3 голосов
/ 14 октября 2013

Вы можете создать скрипт VBS, который заставит окно быть скрытым.

Set WshShell = WScript.CreateObject("WScript.Shell") 
obj = WshShell.Run("""C:\Program Files (x86)\McKesson\HRS 
Distributed\SwE.bat""", 0) 
set WshShell = Nothing 

Затем, вместо выполнения командного файла, выполните сценарий.

3 голосов
/ 07 апреля 2013

Возможно, вас заинтересует моя программа silentbatch , которая будет запускать сценарий .bat / .cmd, полностью подавляя создание окна командной строки (чтобы вы не увидели его и затем исчезните) и при необходимости зарегистрируйте вывод в указанном файле.

3 голосов
/ 03 февраля 2009

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

2 голосов
/ 30 июля 2011

Скомпилируйте пакетный файл в исполняемый файл, используя Batch2Exe http://www.f2ko.de/programs.php?lang=en&pid=b2e. Используйте опцию «Невидимое окно».

1 голос
/ 02 мая 2018

Я использовал это, чтобы запустить файл cmd из c #:

        Process proc = new Process();
        proc.StartInfo.WorkingDirectory = "myWorkingDirectory";
        proc.StartInfo.FileName = "myFileName.cmd";
        proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        proc.Start();
        proc.WaitForExit();
...