Як запустити пакетний файл без запуску «вікна команд»? [дублікат]


131

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

Чи можу я запустити пакетний (.bat або .cmd) файл за допомогою ярлика без "чорного вікна"?


6
Ви запитуєте, чи можете ви запобігти появі вікна команд під час запуску файлу bat?
Ерік

6
Так, ви можете легко змінити колір за замовчуванням у вікні виводу, скориставшись властивостями на ярлику cmd.exe. (так, це жарт ...)
Toby J

Відповіді:


86

Збережіть наступне як wscript, наприклад, hidcmd.vbs після заміни "testing.bat" на ім'я пакетного файлу.

Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false

Другий параметр - oShell.Runце intWindowStyleзначення, що вказує на появу вікна програми, а нульове значення - для прихованого вікна.

Посилання тут http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx


Чи буде третім рядком: strArgs = "cmd / c FILEPATH \ testing.bat"?
Dan Z

1
Будь-який спосіб запустити кажана в піднятому режимі, залишаючись непомітним?
Laurens Swart

Як запустити .batфайл як адміністратор, використовуючи цей метод?
Мехді Дехгані

44

Це лише спрощення відповіді Шаджі. Ви можете запустити пакетний сценарій через сценарій VBScript (.vbs) таким чином:

'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True

Це виконає ваш пакетний файл без показаного вікна команд.


Як запустити .batфайл адміністратором за допомогою цього методу?
Мехді Дехгані

@MehdiDehghani властивості> безпека> запустити як адміністратор. Якщо це працює лише для exe чи додатків, тоді добре.
Тейлор Спарк

21

Просто для розширення відповідей "Використовувати сценарій Windows" (що я вважаю найкращим, оскільки він уже вбудований) ось як це зробити, використовуючи єдиний скрипт обгортки та передаючи ім'я "реального" пакетного файлу як параметр. Додаткові параметри будуть передані в пакетний файл.

If WScript.Arguments.Count >= 1 Then
    ReDim arr(WScript.Arguments.Count-1)
    For i = 0 To WScript.Arguments.Count-1
        Arg = WScript.Arguments(i)
        If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
      arr(i) = Arg
    Next

    RunCmd = Join(arr)
    CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If

Так, наприклад, збережіть вищезазначений файл як NoShell.vbsдесь, а потім зателефонуйте:

NoShell.vbs c:\foo\my_batch_file.bat

Нарешті, якщо ви хочете запустити це звідкись, що не розуміє .vbs-файл (наприклад, "Зовнішні інструменти" у Visual Studio), вам потрібно зателефонувати C:\Windows\System32\wscript.exeз файлом vbs як його першим параметром і вашим пакетний файл як другий.


6
Для тих, хто не любить ідею та концепцію необхідності створення нового файлу vbs для кожного нового файлу bat, який створюється, оскільки треба використовувати будь-який із двох найкращих відповідей, це ідеальне рішення. Замість декількох файлів vbs, у вас буде кілька ярликів. Для кожного нового файлу bat створіть ярлик файлу vbs, клацніть правою кнопкою миші на ньому, виберіть властивості> вкладка ярликів, а у вікні "Ціль" введіть шлях файлу bat після шляху, який вже є, як показано вище або як це якщо ярлик не в тому ж місці , як подати на VBS: "C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat.
Rolo

Якщо шлях до файлу bat має пробіл, як його можна викликати за допомогою ярлика до файлу vbs? Наприклад: "C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat. Незалежно від того, що я намагаюся на шляху - подвійні лапки навколо нього,% 20 замість простору або поєднання цих двох, нічого не працює. Я отримую повідомлення про помилку, яке говорить мені про те, що файл неможливо знайти або нічого не відбувається. Це пов’язано з помилкою користувача на моєму кінці, обмеженням Windows із полем "Ціль" для ярликів або проблемою зі сценарієм vbs, в якому він не обробляє належним чином шляхи файлів з пробілами?
Rolo

@Rolo Я оновив сценарій, так що якщо будь-який з вхідних параметрів має пробіли, він оточить їх лапки. Таким чином, ви захочете обернути шлях до пакетного файлу лапками при його виклику, тоді він буде розглянуто як один аргумент і повторно перегорнути його, перш ніж викликати.
Toby J

9

Ви можете змінити властивості ярлика для запуску до мінімуму.

Щоб запустити його повністю непомітно, вам знадобиться щось інше, наприклад, Windows Scripting.


1
Ваша перша пропозиція - це те, як я завжди робив це.
мартіно

8

Скористайтеся пунктом "/ B". Наприклад:

@echo off
start /B go.bat

25
start /bпросто запустить програму в виділеній на даний момент консолі замість нерестування нової. Ви все одно отримаєте новий, оскільки пакет повинен працювати з cmd (що, в свою чергу, [здивування], відкриває консоль).
Joey

@Joey так, але це дуже корисно для запуску пакетних файлів з інших програм через виконання оболонки (наприклад, SYSTEMу C / C ++).
Томаш Зато

1
@ TomášZato: Ви можете просто викликати пакетний файл безпосередньо в цьому випадку, або, якщо все, що ви використовуєте для нерестування процесу, спочатку не створює оболонку cmd /c foo.cmd. У startцих сценаріях абсолютно немає необхідності використовувати , і, я заперечую, це systemне слід використовувати на користь CreateProcess. Запустивши пакетний файл, ви вже залежите від однієї платформи, ви також можете скористатися кращими інструментами для роботи.
Joey

@Joey Дякую купу, ніколи cmd /cраніше не чув . Команда cmd - це те, що мені було потрібно в моєму випадку, але всі відповіді на stackexchange, які я знайшов поки що, про пакетний файл, що працює з іншим пакетним файлом, мають найвищі відповіді на використання запуску ...
T_D

start /b go.bat не виділить нову консоль (тобто екземпляр conhost.exe - або нитку в csrss.exe перед Windows 7). Однак це зробить безлад, оскільки пакетний сценарій запускається з новим екземпляром cmd.exe, який прикріплений до тієї ж консолі . Обидва екземпляри оболонки змагатимуться за зчитування вводу з консолі, як правило, чергуючись. Це потрібно /w(наприклад start /b /w go.bat) для того, щоб зачекати на другій інстанції, що схоже на використання cmd /cпри використанні system. Крім того, якщо ви телефонуєте CreateProcess, біжіть go.batбезпосередньо. У цьому немає потреби cmd /c.
Ерік Нд

6

Безкоштовний відкритий код GPL "Створити прихований процес"

http://www.commandline.co.uk/chp/

Microsoft Security Essentials та, мабуть, більшість інших сканерів на віруси / зловмисне програмне забезпечення будуть розглядати виконуваний файл chp.exe як вірус, оскільки він приховує будь-яку програму, яку ви вказали, від відображення вікна або кнопки панелі завдань, як і віруси.

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

Вам навіть не довіряти, що включений chp.exe був дійсно створений з цього джерела. Ви можете заздалегідь видалити включений chp.exe і скласти власний з джерела, а всі необхідні інструменти для цього навіть безкоштовні та завантажувані.


Ви також можете зробити ярлик до файлу .bat або .cmd, а потім клацнути правою кнопкою миші на ярлику, Властивості, Ярлик ярлика, Виконати: Згорнутий. Потім у планових завданнях використовуйте ярлик замість файлу .bat / .cmd безпосередньо. Це не дозволить спливати вікно, але кнопка панелі завдань все одно з’явиться.


6

Ви можете використовувати сценарій вікон, наприклад AutoIt .

Як приклад, просто напишіть це в редактор сценаріїв AutoIt. Це досить просто

Run("C:\test\batchfile.bat", "", @SW_HIDE)

Якщо ви хочете запустити його в циклі,

$x=0
Do
 Run("C:\test\batchfile.bat", "", @SW_HIDE)
 Sleep(5000)
Until $x = 1

Складіть його як .exe - і все закінчено.


Так само і в AutoHotkey :

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 

5

Використовуйте прихований старт (коштує 20 доларів)

Прихований старт - запускайте програми та пакетні файли без вікна консолі чи запиту UAC

Консольні програми та пакетні файли регулярно запускаються при запуску Windows або в розкладі. Основна незручність цього полягає в тому, що кожна програма відкриває вікно консолі, яке мерехтить на екрані. Прихований пуск (або Hstart) - це легка утиліта командного рядка, яка дозволяє запускати консольні програми та пакетні файли без вікна у фоновому режимі, обробляти підвищення привілеїв UAC у Windows 7 та Vista, запускати декілька команд паралельно чи синхронно та багато іншого .

введіть тут опис зображення


Це дуже красиво розроблений і корисний додаток.
Гуру Джош

5

Просте рішення, без використання зайвих програм.

  1. Створіть пакетний файл, який ви хочете виконати, і протестуйте його.
  2. Створіть для неї ярлик.
  3. Відредагуйте властивості ярлика: на вкладці Ярлик виберіть Запустити мінімізовано. Призначте для нього гарячий ключ, і ви закінчили!

Удачі!


7
Це не є вирішенням проблеми ОП. Існує різниця між мінімізацією та приховуванням
nixda

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

Це приємне та чисте рішення для моєї проблеми! Дякую!
dmitry_romanov

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