Windows XP или более поздняя версия Windows: Как я могу запустить пакетный файл в фоновом режиме без отображения окна?


Я знаю, что уже ответил на аналогичный вопрос (запуск пакетного файла в фоновом режиме при загрузке windows), но на этот раз мне нужно запустить пакет:

  • из другой партии,
  • без отображения окна консоли,
  • со всеми аргументами передано в невидимый пакет.

первый пакет выполняется в окне консоли. Однако я не хочу, чтобы вторая партия (запущенная первой в a асинхронным способом), чтобы отобразить окно консоли.

Я придумал сценарий VBScript, который делает именно это, и я поставил скрипт в качестве ответа для других, но если у вас есть другие идеи/решения, не стесняйтесь вносить свой вклад.

Примечание: окно консоли командного процессора Windows многими людьми названо не совсем корректным окном DOS.


спасибо всем за ответы. Насколько я понимаю, если мне нужно асинхронно вызовите скрипт для запуска в невидимом режиме:

  • из второго скрипта в окне консоли, start /b вполне достаточно.
  • Из Окна без запуска второго окна, мое решение остается в силе.
8 109

8 ответов:

вам нужен второй пакетный файл для асинхронного запуска? Обычно один пакетный файл запускает другой синхронно с call команда,и второй будет делиться первым окном.

вы можете использовать start /bвторой.летучая мышь для запуска второго пакетного файла aсинхронно с вашего первого, который разделяет ваше первое окно. Если оба пакетных файла записываются на консоль одновременно, выходные данные будут перекрываться и, вероятно неразборчивый. Кроме того, вы хотите поставить exit команда в конце вашего второго пакетного файла, или вы будете в течение секунды cmd оболочка, как только все будет сделано.

вот возможное решение:

из первого скрипта вызовите второй скрипт со следующей строкой:

wscript.exe invis.vbs run.bat %*

на самом деле, вы вызываете скрипт VBS с:

  • [путь]\имя вашего скрипта
  • все остальные аргументы, необходимые для вашего скрипта (%*)

тогда, invis.vbs вызовет ваш скрипт с помощью Windows Script Host Run () метод, которым берет:

  • intWindowStyle : 0 означает "невидимые окна"
  • bwaitonreturn: false означает, что ваш первый скрипт не должен ждать завершения второго скрипта

вот invis.vbs:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False

конвертировать пакетный файл в exe. Попробуй Bat To Exe Converter или Онлайн Конвертер Bat В Exe и выберите опцию, чтобы запустить его в качестве приложения призрак, т. е. без окна.

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

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

скопируйте строки выше в Редактор и сохраните файл.Расширением VBS. Отредактируйте .BAT имя файла и путь соответственно.

вот моя коллекция способов достижения этого - и даже больше-где это было возможно я попытался вернуть также PID запущенного процесса (все связанные скрипты могут быть загружены и сохранены с любым именем, которое вы найдете удобным):

1) The IEXPRESS решение может быть использовано даже на старых машинах win 95/98. Iexpress-это действительно древний инструмент, который все еще упакован с Windows , поскольку аргументы принимают только команду и ее аргументы.

пример использования:

call IEXPhidden.bat "cmd /c myBat.bat"  "argument"

2) SCHTASKS - снова принимает только два аргумента-команда и аргументы.Также проверяет, запускается ли он с повышенными разрешениями и, если возможно, получает PID процесса с помощью команды WEVTUTIL (доступной из Vista и выше, поэтому более новая версия windows получит PID).

пример использования:

call SCHPhidden.bat "cmd /c myBat.bat"  "argument"

3) ' WScript.Оболочка' - скрипт является полной оболочкой 'WScript.Shell 'и все возможные опции могут быть установлены через командную строку options.It' s гибрид jscript/batch и может быть вызван как летучая мышь.

пример использования (для получения дополнительной информации распечатайте справку с помощью '- h'):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 

4) 'Win32_ProcessStartup' - снова полная оболочка и все параметры доступны через аргументы командной строки.На этот раз это WSF / batch гибрид с некоторыми JScript и некоторыми частями кода VBScript - но он возвращает PID запущенного процесса.Если процесс не скрыт, можно использовать некоторые параметры, такие как координаты X/Y (не применимо для каждого исполняемого файла, но, например, cmd.исполняемые принимает координаты).

пример использования (для получения дополнительной информации распечатайте справку с помощью '- h'):

call win32process.bat "notepad" -arguments "/A openFile.txt"  -showWindows 0 -title "notepad"

5) интернет . NET solution . Большинство опций параметров ProcessStartInfo используются (но в конце я был слишком устал, чтобы включить все):

пример использования (для получения дополнительной информации распечатайте справку с помощью '- h'):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal

в другом вопросе я предложил autoexnt. Это тоже возможно в данной ситуации. Просто установите службу для запуска вручную (т. е. не автоматически при запуске). Если вы хотите запустить свой пакет, измените autoexnt.bat-файл для вызова нужного пакетного файла и запуска службы autoexnt.

пакетный файл, чтобы начать это, может выглядеть так (непроверенный):

echo call c:\path\to\batch.cmd %* > c:\windows\system32\autoexnt.bat
net start autoexnt

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

вы должны загрузите Windows 2003 Resource Kit, чтобы получить его. Набор ресурсов также может быть установлен на других версиях windows, таких как Windows XP.

запустите его под другим именем пользователя, используя "runas" или запланировав его под другим пользователем в запланированных задачах Windows.

вы можете запустить свой .bat файл через .vbs file
Скопируйте следующий код в ваш .файл vbs:

Dim WshShell
Dim obj
Set WshShell = WScript.CreateObject("WScript.Shell") 
obj = WshShell.Run("C:\Users\file1.bat", 0) 
obj = WshShell.Run("C:\Users\file2.bat", 0)  and so on
set WshShell = Nothing