Скрыть командное окно .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 ]

1 голос
/ 15 ноября 2017

Или вы можете использовать:

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, чтобы прервать приложение». Что именно то, что мы хотим.

1 голос
/ 07 марта 2017

Чтобы окно командной строки для файла .bat, который выполняет файл .exe, выходило как можно быстрее, используйте строку @start перед файлом, который вы пытаетесь выполнить. Вот пример:

(insert other code here) @start executable.exe (insert other code here)

Вам не нужно использовать другой код с @start executable.exe.

1 голос
/ 29 ноября 2010

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

1 голос
/ 10 августа 2009

Пожалуйста, используйте этот, выше не работает. Я проверил в Windows Server 2003.

@echo off 
copy "C:\Remoting.config-Training" "C:\Remoting.config"
Start /I "" "C:\ThirdParty.exe"
exit
0 голосов
/ 13 мая 2019

Используя 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 аналогичен программе без вывода сообщений Джеймдлина .

Возникает открытый вопрос: что делать с выводом программы, когда ее окно не существует? Что делать, если происходят исключения? Не очень хорошее решение, чтобы выбросить результаты. 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, будет содержать выходные файлы.

...