Запустіть пакетний файл повністю прихованим способом


139

Я шукаю спосіб запустити пакетний файл (.bat), не бачивши нічого користувача (немає вікна, імені панелі завдань, .etc ..).

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


Ха-ха! Точно ні. Я розробляю службу Windows, котра раз у раз запускатиме пакетний файл.
Моаяд Мардіні

4
Служби Windows не працюють як пакетні файли. Вони працюють як служби. Потрібно уточнити питання - як написане, так і з коментарями для мене це не має сенсу.
CarlF

1
У мене є служба Windows, яка запускає пакетні файли. Не те, що сервіс - це пакетний файл.
Моаяд Мардіні

1
На якій мові ви пишете свою послугу?
Х'ю Аллен

є hstart теж.
барлоп

Відповіді:


119

Рішення 1:

Збережіть цей один рядок тексту як файл invisible.vbs:

CreateObject ("Wscript.Shell"). Запустити "" "" & WScript.Arguments (0) & "" "", 0, false

Щоб запустити будь-яку програму або пакетний файл невидимо, використовуйте його так:

wscript.exe "C: \ Куди б \ \ невидимий.vbs" "C: \ Дещо інше місце \ MyBatchFile.bat"

Для того, щоб також можна було передати / передати список аргументів, використовуйте лише дві подвійні лапки

CreateObject ("Wscript.Shell"). Запустити "" & WScript.Arguments (0) & "", 0, false

Приклад: Invisible.vbs "Kill.vbs ME.exe"

Рішення 2:

Використовуйте інструмент командного рядка, щоб беззвучно запустити процес: тихо , приховано або заховано .


2
Чому 4 подвійні цитати, ви можете, будь ласка, пояснити?
Starx

Що робити, якщо нам знадобиться запустити приховану програму?
Starx

5
Синтаксис @Starx VB. &означає з'єднати рядки. Рядки укладені у подвійні лапки ( "). Послідовні подвійні лапки ( "") всередині розділових рядків означають буквальну подвійну лапки ( "). Отже, чотири подвійні лапки ( """") були б рядковим буквалом одного символу, подвійним цитатою ( "). Складіть його разом і """" & WScript.Arguments(0) & """"став би "<argument>", де <argument>перший аргумент командного рядка переданий до сценарію.
Боб

4
Як його змінити, щоб він передав усі аргументи? Було б зручніше передавати аргументи, не цитуючи їх.
Ctrl-C

2
Це все ще не вимагає від вас створити пакетний файл для розміщення wscript.exe "C:\Wherever\invisible.vbs" ...всередині?
ендоліт

26

Сховати пакетні файли або командні файли або будь-які файли .... Використовуйте вбудовану IExpress.exeутиліту Windows XP для створення .EXE з пакетного файлу. Під час використання IExpressпереконайтеся, що ви перевірили параметр запустити прихований і встановити прапорець у всіх полях про те, що нічого не показується Після створення файлу .exe розмістіть його в будь-якій папці команд запуску, яку ви вибрали, і ви ніколи не побачите, що вона з'явиться.


1
О, хороше рішення насправді.
Каміло Мартін

7
Чи є щось еквівалентне lexpress.exe в нових версіях Windows, як Windows 7?
Snađошƒаӽ

@ Snađошƒаӽ Це у Windows 7 .... просто перевірив це
DarthRubik

@DarthRubik Дякую за те, що поділився цим. Я занадто тестував це, і він працює просто чудово. Час підтвердити відповідь. :)
Snađошƒаӽ

Схоже, це не працює в Windows 10 64, оскільки "Command.com" більше не присутній
Arne S

10

використання Cmdow - це утиліта командного рядка Win32 для NT4 / 2000 / XP / 2003, яка дозволяє перелічувати, переміщувати, змінювати розміри, перейменовувати, приховати / невідомі, відключати / включати, мінімізувати, максимізувати, відновлювати, активувати / інактивувати, закривати, вбивати та більше.

Запустіть пакетний файл, прихований, передаючи його параметри: -

cmdow / run / схований mybat arg1 "arg 2"


Але як би я запустив цю команду?
Мояд Мардіні

9
cmdow виявляється шкідливим програмним забезпеченням у більшості антивірусних продуктів. Тому важко буде використовувати це рішення в інших місцях, ніж у вас є ПК.
Ганеш Р.

@Ganesh: Будь-яке краще рішення?
Мояд Мардіні

Це відкритий код? Немає сенсу користуватися стороннім додатком, який не є відкритим кодом, і він може упакувати трояни, коли ви можете зробити те ж саме, запустивши vrscript 1 рядка harrymc (див. Відповідь у верхній частині теми).
thebunnyrules

1
Ну, це з відкритим кодом, тому це досить приголомшливо. Отримати вихідний код можна тут: github.com/ritchielawrence/cmdow
thebunnyrules

9

Якщо ваш пакетний файл може вміститися в один рядок і так багато символів, просто скористайтеся ярликом, клацнувши правою кнопкою миші всередині папки, поміщеної у випадковий каталог, і пропустіть решту майстра, і нарешті, клацніть правою кнопкою миші на щойно створеному ярлику та натисніть "Властивості" та під ціллю введіть те, що ви зазвичай ставите у файл bat. А Бобс твій дядько!

Плюси:

 No Command Window
 Ability to use an icon
 Same Functionality of bat file

Мінуси:

 Limited to one line, so many characters

Єдина проблема полягає в тому, що ви не можете пов’язати тип файлу з ярликом. Отже, якщо ви хочете відкрити пакетний сценарій, двічі клацнувши по ньому в провіднику, вам все-таки потрібен .bat-файл.
Бьорн Ліндквіст

Я все ще намагаюся знайти дядька Боба, тут десь десь !!
Pimp Juice IT

7

Запустіть сценарій через роботу, не роблячи його інтерактивним:

at 11:00 script.bat

Інше рішення, якщо ви не проти встановити щось на зразок Python, ви можете просто створити сценарій і запустити його pythonw(пов'язана версія для операцій з графічним інтерфейсом). Оскільки ви не використовуєте жодних графічних API, вікно не відображатиметься. Просто використовуйте виклики до, os.system()і це буде імітувати пакетний сценарій, оскільки це те саме, що вводити рядки в командний рядок.

Приклад:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")

3
Але як би я запустив цю команду?
Мояд Мардіні

Вам доведеться або планувати заплановане завдання, або написати службу.
Нефінансувавшись

приклади додані.
Джон Т


6

За допомогою Windows7 ви можете використовувати панель управління "Заплановані завдання" для планування пакетного файлу, який запускається у фоновому режимі невидимо із заданими дозволами і навіть як обліковий запис "СИСТЕМА". Дивіться знімок екрана нижче:

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

Крім того, не маючи такої кількості можливостей, ви також можете створити невидимий пакетний сценарій, подібний до цього, з командного рядка, використовуючи команду "AT.exe" без опції "/ interactive".


3
Прихований прапорець просто приховує завдання від користувальницького інтерфейсу планувальника завдань (
Sourav Ghosh

Запуск завдання як "СИСТЕМА", коли йому не потрібні привілеї "СИСТЕМА" (і не перевірений на предмет недоліків безпеки та посилений) як погана ідея; дивіться коментарі тут .
Скотт

6

Мені не подобається рішення VBScript.

Завантажте та скопіюйте nircmd.exe у свою %systemroot%\system32папку, а потім додайте цю команду до першого рядка вашої партії:

nircmd.exe win hide ititle "cmd.exe"

або зробіть заголовок партії звичайним заздалегідь за допомогою titleкоманди, щоб не приховувати всі cmdвікна, наприклад:

title MyBatch
nircmd.exe win hide ititle "MyBatch"

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



3

ІНШИЙ З С / С ++ - це використовувати функцію CreateProcess із прапором CREATE_NO_WINDOW. Він має багато додаткової потужності, яка тут не показана. Це лише той мінімум, який вам потрібно замінити на систему () або сімейство _spawn ().

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);

PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );

// Spawn creates a cmd.exe window.  CreateProcess doesn't.
//if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) {  
if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false,
                     CREATE_NO_WINDOW, NULL, NULL, &si, &pi  ) ) {
  MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() );
  goto MyErrorHandling;
}

WaitForSingleObject( pi.hProcess, INFINITE );

CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

1
Правильна відповідь для підходу WINAPI. Ось вихідний код та додаток як додаток до вашої відповіді.
Олексій

3

Відмінний конвертер Bat To Exe конвертує ваш файл .batабо .cmdфайл у .exeфайл.

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

Ось скріншот головного вікна інтерфейсу:


Зауважте, що це зображення застаріло. Він показує версію 2.4.8, а станом на вересень 2018 року веб-сайт пропонує версію 3.0.10.0 (останнє оновлення 2018-03-23).

Попередження: посилання на веб-сайт www.f2ko.de coinhive.com, яке широко ідентифікується як шкідливе програмне забезпечення .


2

Я зробив це успішно з nircmd таким чином:

  1. завантажити nircmd.exe за посиланням
  2. створити свій .bat файл
  3. перший рядок файлу .bat повинен бути таким: nircmd.exe win hide ititle "cmd.exe"
  4. виберіть обидва файли та створіть файл самостійного вилучення за допомогою winrar
  5. на вкладці "загальні" встановіть прапорець "Створити файл автоекстракції"
  6. на вкладці "заздалегідь" виберіть кнопку "автоматичний витяг"
  7. є нове вікно і виберіть вкладку "режим", потім виберіть опцію: "приховати все"
  8. виберіть вкладку "оновити" та виберіть опцію "перезаписати наявні файли"
  9. Виберіть вкладку "загальні" та визначте папку призначення для вилучення, якщо бажаєте, і у полі "Виконати після вилучення" напишіть повний шлях, куди буде вилучено ваш .bat. Наприклад: якщо ви визначаєте папку вилучення як: "c: \ windows \", то повний шлях до виправдання після вилучення буде: "c: \ windows \ file.bat" (у випадку, коли ваш .bat названий: file.bat )
  10. натисніть Прийняти у всіх вікнах

Тепер у вас буде файл .exe, який після натискання на нього та встановлення його .bat буде повністю прихований.


1
cmdow /run /hid "file.extention" arg1 "arg 2"

3
Будь ласка, включіть коротке пояснення команди. Це може допомогти ОП (та іншим) зрозуміти, як вона працює, а не просто копіювати команду та використовувати її.
BloodPhilia


'cmdow' is not recognized as an internal or external command, operable program or batch file.
Бакко

1

Не потрібно робити особливих.

Якщо ви використовуєте пакетні файли з сервісу Windows, вони повинні бути прихованими за замовчуванням, якщо ви не включите в службі параметр "Дозволити службі взаємодіяти з робочим столом".


1

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

Створіть пакетний скрипт із пакетною логікою та командами в ньому, а потім створіть новий файл із .VBSрозширенням, скористайтеся нижченаведеною логікою (приклад, який я надав нижче) та просто підключіть повний шлях до вашого .CMDчи .BATфайлу PING -t <IPAddress>командами тощо. він виконує пакет у прихованому порядку, не показуючи вікно команди при його виконанні.

Там, де логіка в наведеному нижче прикладі вказує C:\Folder\BatchFileName.cmdзмінити, щоб вказати на пакетний скрипт із командами, які ви виконуєте вручну тощо.

Збережіть .VBSфайл і заплануйте його за допомогою Task Scheduler планування задач на завдання Windows7, щоб він працював на невизначений графік для ваших потреб.

В іншому випадку просто двічі клацніть по .VBSфайлу, щоб запустити нескінченну PINGкоманду, яку ви вводите у пакетний файл, вказуєте на необхідне.

ПРИМІТКА. Я вважаю, що саме звідси я взяв цю логіку сценарію, але вона надійно працює для тієї ж мети, яка вам потрібна тут, щоб забезпечити приховання вікна команд при запуску пакетного файлу Джерело помилок сервера

ПРИКЛАД VBS SCRIPT RUN COMMAND LINE BATCH HIDING CMD WINDOW

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing

1

Тут я зібрав усі способи, за якими я знаю, щоб почати прихований процес із пакетною без зовнішніх інструментів. З готовим до використання скриптами (деякі з них досить багаті на варіанти), і всі вони утворюють командний рядок. Де можливо також PID повертається. Використовувані інструменти - IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process та JScript.Net


1

Незважаючи на те, що я вже відповів на це, ось ще один підхід. Тут різним є те, що пакетний сценарій може самостійно приховувати себе під час запуску. Хоча вам знадобляться два додаткові сценарії - windowMode.bat та getCMDPid.bat (обидва містять .netкод). Ось як тоді можна використовувати:

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit


0

Я почав намагатися розібратися в цьому і ніколи не досяг успіху. Це було так само, як я:

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul

0

Мені потрібно було сховати вікно для пакетного файлу, викликаного з контекстного меню провідника, а також потрібно додати лапки до параметра. Жодна з відповідей не працювала для мене, тому я додаю власне рішення.

Це було в команді реєстру для контекстного меню провідника:

cmd /c C:\mypath\myprogram.bat "%1"

Тож для його заміни мені довелося створити vbs на зразок цього:

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

Збережіть у подібному місці C:\mypath\myscript.vbsта назвіть це у реєстрі:

wscript "C:\mypath\myscript.vbs" "%1"

Зауважте, що у .bat шляху не може бути пробілів, тому замініть його на 8.3. Так, наприклад C:\Program Files\myprogram.bat, потрібно посилатися на C:\Progra~1\myprogram.bat. Щоб побачити назву файлу 8.3dir /x


0

Мені створено RunApp, щоб виконувати таку роботу, а також використовую її у виробництві env, сподіваюся, що це допомагає.

Конфігурація, як показано нижче:

файл: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

І запустити runapp.exeзамість цього.


-1

Це працює для Windows 8 (можливо, інших)

  1. Створіть пакетний файл як звичайний
  2. Створіть ярлик до пакетного файлу
  3. Клацніть правою кнопкою миші на ярлику> властивості
  4. Клацніть Макет
  5. Зніміть прапорець "Нехай системне вікно"
  6. встановити ліве положення tp -1000
  7. натисніть застосувати

  8. Натисніть на ярлик, і він запуститься, але ви його не побачите :)


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