it-swarm-ru.tech

Запустите командный файл полностью скрытым способом

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

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

130
Moayad Mardini

Решение 1:

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

CreateObject ("Wscript.Shell"). Выполнить "" "" & WScript.Arguments (0) & "" "", 0, False

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

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

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

CreateObject ("Wscript.Shell"). Run "" & WScript.Arguments (0) & "", 0, False

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

Решение 2:

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

112
harrymc

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

25
Paul Cheselske

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

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

cmdow/run/hid mybat arg1 "arg 2"

8
joe

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

Плюсы:

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

Минусы:

 Limited to one line, so many characters
8
Jack S

Запустите скрипт через задание 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")
7
John T

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

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

nircmd.exe win hide ititle "cmd.exe"

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

title MyBatch
nircmd.exe win hide ititle "MyBatch"
5
BijaN-R

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

start /MIN batch.cmd
5
Brad Gilbert

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

enter image description here

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

5
djangofan

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

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

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


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

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

3
BullyWiiPlaza

И ДРУГОЙ способ, из 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 );
3
Swiss Frank

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

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

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

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

3
Rolnik

Я сделал это успешно с 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 будет полностью скрыт.

2
ZEUS

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

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

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

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

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

NOTE: _ ​​Я полагаю, что именно здесь я получил эту логику сценария, но она надежно работает для той же цели, которая вам здесь нужна, а именно для обеспечения того, чтобы командное окно было скрыто при запуске пакетного файла Ошибка сервера) Источник

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

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

ЗдесьЯ скомпилировал все известные мне способы запуска скрытого процесса с помощью пакета без внешних инструментов. С готовыми к использованию скриптами (некоторые из них довольно богаты опциями) и всеми они формируют командную строку. Где это возможно, также возвращается PID. Используемые инструменты: IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process и JScript.Net

1
npocmaka

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

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

1
sgmoore

Несмотря на то, что я уже ответил на это, вот другой подход. Разница заключается в том, что пакетный скрипт может самостоятельно скрывать себя во время своего запуска. Вам понадобятся два дополнительных скрипта - 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
npocmaka
cmdow /run /hid "file.extention" arg1 "arg 2"
1
malak

Мне нужно было скрыть окно для пакетного файла, вызываемого из контекстного меню проводника, а также добавить кавычки для параметра. Ни один из ответов не сработал для меня, поэтому я добавляю свое собственное решение.

У меня было это в «команде» реестра для контекстного меню проводника:

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
bortao

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

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

файл: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

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

0
James Yang

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

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

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

0
Alan Panayotov