124

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

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

23 ответа23

107

Решение 1:

Сохраните эту одну строку текста как файл invisible.vbs:

CreateObject("Wscript.Ракушка").Запустите "" "" & WScript.Аргументы (0) & "" "", 0, False

Чтобы незаметно запустить любую программу или командный файл, используйте его следующим образом:

wscript.exe "C:\Wherever\invisible.vbs" "C:\ Некоторые другие места \ MyBatchFile.bat"

Чтобы также иметь возможность передавать / передавать список аргументов, используйте только две двойные кавычки

CreateObject("Wscript.Ракушка").Запустите "" & WScript.Аргументы (0) & "", 0, Ложь

Пример: Invisible.vbs "Kill.vbs ME.exe"

Решение 2:

Используйте инструмент командной строки для автоматического запуска процесса: Quiet, hidecon или hideexec.

25

Чтобы скрыть командные файлы или командные файлы или любые файлы .... Используйте встроенную в Windows XP утилиту IExpress.exe для сборки.EXE из пакетного файла. При использовании IExpress убедитесь, что вы отметили опцию Run hidden и отметили все поля, чтобы ничего не показывать. После того, как вы создадите .exe-файл, поместите его в любую папку с командами запуска, которую вы выберете, и вы никогда не увидите, что она появится.

8

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

Запустите скрытый пакетный файл, передав ему параметры:-

cmdow /run /hid mybat arg1 "arg 2"

8

Если ваш пакетный файл может уместиться в одну строку и так много символов, просто используйте ярлык, щелкнув правой кнопкой мыши внутри папки, помещенной в случайный каталог, и пропустив оставшуюся часть мастера, и, наконец, щелкните правой кнопкой мыши на только что созданном ярлыке и щелкните свойства и под целевой введите то, что вы обычно помещаете в файл bat. И Бобс твой дядя!

Плюсы:

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

Минусы:

 Limited to one line, so many characters
7

Запустите скрипт через задание at, не делая его интерактивным:

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")
5

Мне не нравится решение VBScript.

Загрузите и скопируйте файл nircmd.exe в папку %systemroot%\system32 , затем добавьте эту команду в первую строку пакета:

nircmd.exe win hide ititle "cmd.exe"

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

title MyBatch
nircmd.exe win hide ititle "MyBatch"
5

Вы можете запустить его легко свернутым.

start /MIN batch.cmd
5

Используя Windows7, вы можете использовать панель управления "Запланированная задача", чтобы запланировать запуск пакетного файла в фоновом режиме невидимым образом с указанными разрешениями и даже в качестве учетной записи "SYSTEM". Смотрите скриншот ниже:

Более того, несмотря на не так много возможностей, вы также можете создать задачу невидимого пакетного сценария, подобную этой, из командной строки, используя команду «AT.exe» без параметра «/interactive».

3

Превосходный Конвертер Bat To Exe преобразует ваш файл .bat или .cmd файл .exe .

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

Вот скриншот главного окна интерфейса:


Обратите внимание, что это изображение устарело.  Он показывает версию 2.4.8, и по состоянию на сентябрь 2018 года веб-сайт предлагает версию 3.0.10.0 (последнее обновление 2018-03-23).

Предупреждение: сайт www.f2ko.de ссылается на coinhive.com , который широко известен как вредоносное ПО.

3

Кажется, кто-то составил список из 7-8 способов запустить «тихий»:

http://forums.techguy.org/dos-other/644932-solved-howto-run-batch-file.html

2

И ДРУГОЙ способ, из C/C++, это использовать функцию CreateProcess с флагом CREATE_NO_WINDOW. Это имеет много дополнительной мощности, не показанной здесь. Это как минимум тот минимум, который вам необходим для замены system() или семейства _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 );
2

Вы также можете создать скрипт AutoHotkey :

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

Я сделал это успешно с nircmd следующим образом:

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

Теперь у вас будет файл .exe, который после того, как вы нажмете на него и установите, ваш .bat будет работать полностью скрытым.

1

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

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

Если логика в приведенном ниже примере указывает, что C:\Folder\BatchFileName.cmd измените его так, чтобы он указывал на пакетный сценарий с вашими командами, которые вы запускаете вручную, и т.д. Сейчас.

Сохранить .VBS файл и график его с помощью Task Scheduler Проблемы планирования задания на windows7 для работы на неопределенный график для ваших нужд.

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

ПРИМЕЧАНИЕ. Я полагаю, что именно здесь я получил эту логику сценария, но она надежно работает для той же цели, что и здесь, которая заключается в том, чтобы гарантировать, что командное окно скрыто при запуске командного файла. Источник сбоя сервера

ПРИМЕР VBS SCRIPT RUN КОМАНДНАЯ СТРОКА, ЗАКРЫВАЮЩАЯ ОКНО CMD

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

Вам не нужно делать ничего особенного.

Если вы запускаете пакетные файлы из службы Windows, они должны быть скрыты по умолчанию, если вы не включите в службе параметр "Разрешить службе взаимодействовать с рабочим столом".

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
1
cmdow /run /hid "file.extention" arg1 "arg 2"
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.3, используйте dir /x

0

Я создал RunApp для такой работы, а также использую ее в своей рабочей среде , надеюсь, это поможет.

Конфиг, как показано ниже:

файл: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

И вместо этого запустите runapp.exe .

0

Я начал пытаться понять это и никогда не получалось. Это было так близко, как я получил:

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

У меня была такая же проблема, но разобрался:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)

-1

Это работает для Windows 8 (возможно, другие)

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

  8. Нажмите на ярлык, и он запустится, но вы его не увидите :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .