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


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.