Вопрос: Как запустить пакетный файл без запуска «окна команд»? [Дубликат]


На этот вопрос уже есть ответ:

В Windows XP я могу запустить пакетный файл (.bat или .cmd) через ярлык без «черного окна»?


119
2018-05-11 17:31


Источник


Вы спрашиваете, можете ли вы предотвратить появление окна команд при запуске файла bat? - Eric
Да, вы можете легко изменить цвет по умолчанию окна вывода, используя Свойства в ярлыке cmd.exe. (да это шутка ...) - Toby J


Ответы:


Сохраните следующее как wscript, например hidecmd.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 


82
2018-05-11 19:55



Будет ли третья строка: strArgs = "cmd / c FILEPATH \ testing.bat"? - Dan Z
Любой способ запустить летучую мышь в повышенном режиме, оставаясь невидимым? - Laurens Swart
Как запустить .bat как администратор, используя этот метод? - Mehdi Dehghani


Это просто упрощение ответа Шаджи. Вы можете запустить свой пакетный скрипт через VBScript (.vbs):

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

Это приведет к выполнению командного файла без отображения командного окна.


41
2018-02-15 09:52



Как запустить .bat файл как администратор, используя этот метод? - Mehdi Dehghani


Просто чтобы развернуть ответы «Использовать сценарии 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 в качестве первого параметра, а ваш командный файл - вторым.


18
2018-01-10 17:50



Для тех, кому не нравится идея и концепция создания нового файла 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


Вы можете изменить свойства ярлыка, чтобы выполнить минимизацию.

Чтобы запустить его полностью невидимо, вам понадобится еще что-то вроде Windows Scripting.


9
2018-05-11 19:50



Ваше первое предложение - это то, как я всегда это делал. - martineau


использование Начало с опцией '/ B'. Например:

@echo off
start /B go.bat

8
2018-05-11 17:36



start /b просто запустит программу в текущей выделенной консоли вместо того, чтобы создать новую. Вы все равно получите новый, так как пакет должен работать с cmd (что, в свою очередь, [неожиданно], открывает консоль). - Joey
@Joey да, но это очень полезно для запуска пакетных файлов из других приложений с помощью выполнения оболочки (например, SYSTEMв C / C ++). - Tomáš Zato
@ TomášZato: вы можете просто вызвать пакетный файл непосредственно в этом случае или, если все, что вы используете для создания процесса, сначала не создает оболочку, используйте cmd /c foo.cmd, Абсолютно не нужно использовать start в этих сценариях, и, я бы сказал, что system не следует использовать в пользу CreateProcess, Запустив командный файл, вы уже зависите от одной платформы, вы также можете использовать лучшие инструменты для работы. - Joey
@Joey Спасибо, куча, никогда не слышал о cmd /c до. Команда cmd - это то, что мне нужно в моем случае, но все ответы на stackexchange, которые я нашел до сих пор, о пакетном файле, в котором запущен другой пакетный файл, имеют верхние ответы, чтобы использовать start ... - 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, - eryksun


Бесплатный GPL с открытым исходным кодом «Создать скрытый процесс»

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

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

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

Вам даже не нужно верить, что включенный chp.exe действительно был построен из этого источника. Вы можете пойти и отбросить включенный chp.exe и скомпилировать свой собственный источник, и все необходимые инструменты для этого - даже бесплатные и загружаемые.


Вы также можете просто создать ярлык для файла .bat или .cmd, затем щелкните правой кнопкой мыши ярлык, вкладка «Свойства», «Ярлык», «Запустить»: «Свернуть». Затем в запланированных задачах используйте ярлык вместо файла .bat / .cmd. Это предотвратит всплытие окна, но кнопка панели задач все еще будет отображаться.


6
2017-10-22 21:17





использование Скрытый старт  (стоит 20 долларов США)

Скрытый запуск - запуск приложений и пакетных файлов без окна консоли или командной строки UAC

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

enter image description here


5
2018-05-12 16:03



Это очень хорошо разработанное и полезное приложение. - Guru Josh


Вы можете использовать скрипты окна, такие как 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
2018-05-29 03:48