Як створити пакетний пакет Windows, який не показує командний рядок при виконанні? [дублікат]


58

На це питання вже є відповідь тут:

Я встановив коштовний камінь з рубіном під назвою Redcar, який запускається з командного рядка. Коли він запускається, він краде оболонку, поки вона не припиняється, тому мені доведеться створити нове вікно оболонки, щоб продовжувати виконувати роботу командного рядка. Оболонка, яку я використовую, - це оболонка GITBash від MySysGit.

Я вважаю, що файл Redcar.bat призначений для запуску Redcar як ярлика, я вважаю, але я не хочу, щоб додаткове вікно командного рядка відкривалося кожного разу, коли я запускаю файл BAT.

Як мені просто запустити BAT, не побачивши підказки?


1
Бажаю, я знав відповідь на цей +1 за гарне запитання.
Суперсереальний

@Kyle подібне питання було задано перед superuser.com/questions/191149/how-to-execute-cmd-exe-silently згадує HSTART і коротко зазначає, що файл VBS може також запустити його
barlop

Чи можете ви оновити обрану відповідь? Це можливо і дуже просто, коли ви знаєте, як .. пакетний файл: рядок 1: set var1=hello.txtрядок 2:start "test" notepad.exe "%~dp0%var1%"
Коді Браун

Просто використовуйте ::або @REM. Джерело: superuser.com/a/843754/101936
PHPst

Відповіді:


38

Ви не можете - виконання пакетного файлу із вбудованим командним рядком буде тримати вікно відкритим, поки не вийде пакетний файл.

Що ви можете зробити - це вжити заходів, щоб переконатися, що пакетний файл виходить максимально швидко. Якщо це можливо, змініть пакетний файл, щоб запустити будь-яку програму з startкомандою. За замовчуванням startповертається негайно, не чекаючи, коли програма вийде, тому пакетний файл буде продовжувати працювати і, імовірно, негайно вийти. У поєднанні з цим, змінивши ярлик, щоб запустити пакетний файл мінімізовано, і ви побачите лише спалах панелі завдань, навіть не побачивши вікно на екрані.

Одне застереження до цього полягає в тому, що якщо ви запускаєте програму в консольному режимі, в якій є багато інтерпретаторів скриптів, пакетний файл буде чекати виходу програми, а за допомогою startнересту з'явиться нове вікно консолі. У цьому випадку потрібно запустити інтерпретатор на базі Windows, а не консольний - не startпотрібно. Для Perl ви б бігли wperl.exeзамість perl.exe. Для Python це pythonw.exeзамість python.exe. Я завантажив старий дистрибутив Win32 Ruby rubyw.exe, який повинен робити те саме.

Остаточна можливість полягає у використанні стороннього інструменту для запуску командного рядка з прихованим вікном. Я чув про такі речі, але ніколи не використовував їх для використання, тому не знаю нічого, зокрема, щоб на вас вказати.


Дякую, що відповідає на моє запитання. Що насправді дратувало, це не те, що з'явилося вікно підказок, але воно повинно залишатися відкритим, поки програма працює. Зараз спалах абсолютно терпимий, і це не так, як дратує. Перевіряю, чи можу я змінити скрипт для запуску rubyw замість ruby.
Джейк

1
Величезне спасибі за роз'яснення різниці між "python" будь-яким "pythonw" - нарешті я знайшов рішення для запуску інструментів вікна python у нас без командного рядка у фоновому режимі.
FP

´java.exe´ та ´javaw.exe´ однакові.
redbeam_

Можна - тільки не в самому пакетному коді. насправді тут є ряд питань, що стосуються того, як приховати командний рядок superuser.com/questions/62525/… superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop

21

Я думаю, що це найпростіше і найкоротше рішення для запуску пакетного файлу без відкриття вікна DOS, це може бути дуже відволікаючим, коли ви хочете запланувати набір команд, які потрібно періодично запускати, тому вікно DOS постійно спливає, ось ваше рішення . Використовуйте сценарій VB для виклику пакетного файлу ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

Скопіюйте рядки вище в редактор та збережіть файл із розширенням .VBS. Відредагуйте ім’я та шлях файлу .BAT відповідно. Тоді просто запустіть .vbs файл, і магія стане!


8

Ви можете запустити інший пакетний файл за допомогою START / MIN CMD.EXE / C mybatchfile.bat з командного рядка.

Ззовні воно виведе вікно консолі cmd, але, щоб уникнути цього, ви можете створити файл ярлика із властивостями, зміненими, щоб почати мінімізовано .


2
У Windows 8.1 цей параметр знаходиться у Властивості -> Вкладка ярлика -> Виконати: -> Згорнутий (за замовчуванням - "Звичайне вікно")
пікс

5

Для цього за допомогою програми Bat To Exe Converter конвертуйте свій пакетний файл у виконуваний файл.

Під час перетворення у виконуваний файл ви знайдете можливість запустити свій файл у вигляді програми «Невидимий» у розділі видимості. Таким чином, коли ви запустите його, він буде працювати без вікна.

Бат для екзе


Веб-сайт вимагає, щоб ваш комп'ютер "вирішував" криптовалюту. Ось програма nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks

4

Продовжуючи відповідь Деніса Вільямсона, ви можете відредагувати пакетний файл та додати (додати) START /Bдо команди, яку виконуєте.

Наприклад, у мене є пакетний файл, який запускає шпаклівку і мав ту ж проблему (додатковий CMD), так ось як я це написав:

@ECHO OFF
СТАРТ / Б putty.exe -load name_of_my_config_file

Це спрацювало чудово.


4

Спробуйте:

START /B batchfile

нота, додана барлопом

старт /? каже / В

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.

3
Це може спрацювати, якщо у мене відкрито командний рядок, але коли я використовую .bat, я двічі клацнув його або ярлик до нього на робочому столі. Я намагаюся уникнути необхідності мати командний рядок для запуску цієї програми.
Джейк

3

Мені не зрозуміло, що стосується вашої проблеми, але в деяких моїх пакетних файлах я використовую "манекена", який є єдиною метою - запустити основний пакетний файл.

Тож GO.BAT матиме:

cmd /c go2.bat %1 %2 %3
exit

Вихід закриває вікно командного рядка, яке в іншому випадку залишатиметься відкритим.

І GO2.BAT матиме власне вміст пакетного файлу, який я бажаю.

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...


1

Якщо ви все ще зацікавлені в тому, щоб взагалі не відображати вікно консолі, ось рішення від stackoverflow, яке працювало на мене (у моєму випадку я нічого не вкладав у реєстр, але там, де мені потрібно).


0

Просто поставте перемикач / b перед стежкою. Він не відкриє другий командний рядок.


0

Відповідь Індаго досі було найкращим рішенням для мене. Файл VBS дозволяє мені запускати функціональність партії через сценарій, запобігаючи в першу чергу вікні CMD. Однак є кілька застережень:

  1. Якщо ваша партія вимагає адміністраторських прав, створіть або використовуйте наявну партію, яка викликає VBS, і запускайте її як адміністратор.

  2. Не маючи наочності, може бути важко розрізнити, що те, що ви намагаєтеся зробити, насправді працює так, як ви хочете.

З огляду на це, я б поставив спочатку невеликий тест з налаштування / блоку, щоб переконатися, що він працює саме так, як ви хочете, перш ніж інтегрувати його.


0

Раніше я використовував cmdow , і, здається, він працював на те, що я хочу.

Можливо, ви захочете скористатися одним із наступних варіантів: CMDOW [window] /HID

/HID приховує вказане вікно

CMDOW [window] /END

/END закриває вказане вікно

CMDOW [window] /CLS

/CLS ввічливо попросив закрити вікно (деякі вікна можуть відкрити діалогове вікно)

Сподіваюся, це допомагає.


-5

Просто зробіть ярлик до пакетного файлу, клацніть правою кнопкою миші на ньому, натисніть на Properties, перейдіть на Generalвкладку, поставте прапорець Hidden, натисніть на, Applyпотім натисніть на OK.
Тепер, коли ви відкриєте ярлик, він запустить пакетний файл Hidden.


Це неправильно, оскільки він просто приховує файл ярликів / пакетних файлів, тоді як те, що користувач хоче, це пакетний файл, який запускається невидимо.
Не корінь сюди, плз ...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.