Как запустить несколько окон / вкладок Internet Explorer из командного файла?

Я хотел бы, чтобы командный файл запускал две отдельные программы, а затем закрывало окно командной строки. На самом деле, чтобы уточнить, я запускаю Internet Explorer с двумя разными URL-адресами.

Пока у меня что-то вроде этого:

start "~\iexplore.exe" "url1"
start "~\iexplore.exe" "url2"

Я получаю один экземпляр Internet Explorer с загруженным только вторым URL-адресом. Кажется, второй заменяет второй. Кажется, я помню синтаксис, в котором я загружал новое окно командной строки и передавал команду для выполнения при загрузке, но не мог найти ссылку.

В качестве второй части вопроса: какой хороший ссылочный URL-адрес следует хранить на время, когда вам нужно написать быстрый пакетный файл?

Изменить: я отметил ответ, потому что он работает. Теперь у меня открыто два окна, по одному для каждого URL. (спасибо!) Самое смешное, что без подхода / d с использованием моего исходного синтаксиса я получаю разные результаты в зависимости от того, открыт ли у меня уже существующий экземпляр Internet Explorer.

  • Если я это сделаю, я добавлю две новые вкладки для моих двух URL-адресов (мило!)
  • В противном случае я получаю только одну последнюю вкладку для второго URL-адреса, который я передал.

person TheZenker    schedule 09.10.2008    source источник
comment
Кроме того, я думаю, что если вы просто воспользуетесь этим ‹br/› ‹i›, запустите google.com, запустите yahoo.com ‹/i› ‹br/› вы позволите системе выбрать любимый браузер, чтобы открывать их в (Кстати, вы предпочли браузер с двумя вкладками / одним или двумя окнами?)   -  person Rodger Cooley    schedule 10.10.2008
comment
Хммм ... думаю, комментарии не любят HTML ...   -  person Rodger Cooley    schedule 10.10.2008
comment
см. stackoverflow .com / questions / 26099153 /   -  person vafylec    schedule 24.08.2017


Ответы (9)


Попробуйте это в своем командном файле:

@echo off
start /d "C:\Program Files\Internet Explorer" IEXPLORE.EXE www.google.com
start /d "C:\Program Files\Internet Explorer" IEXPLORE.EXE www.yahoo.com
person Rodger Cooley    schedule 09.10.2008
comment
Он предоставил путь запуска для исполняемого файла. - person Rodger Cooley; 02.06.2011
comment
Предложенный Роджером ответ меня не устроил. Он открывает URL-адрес в Internet Explorer, но в моем случае (с IE 9) он по-прежнему открывает новое окно при каждом вызове, даже если у меня установлены параметры IE для открытия ссылок из других программ на новой вкладке в текущее окно. :( - person Jon Burchel; 20.07.2011
comment
Вы можете заставить его работать именно так, как вы хотите: `@echo off start link www.google.com start link www.yahoo.com` Если ни один браузер не открыт, браузер по умолчанию будет вызываться с первым URL-адресом. Если браузер открыт (что будет для вашей второй и последующих команд), то URL-адрес будет открыт в новой вкладке. - person Terrible Tadpole; 15.09.2016
comment
Черт возьми ... разрыв строки требуется перед каждой командой запуска. Я не мог показать их в комментариях, и время на редактирование закончилось. - person Terrible Tadpole; 15.09.2016
comment
@TerribleTadpole - Я не мог заставить это работать. Я пробовал start "link" www.google.com && start "link" www.yahoo.com. Internet Explorer открывается только с одной вкладкой, на которой отображается вторая ссылка (yahoo). Это точно такая же ситуация, которую OP описал и пытается обойти. Если я добавлю задержку между двумя start командами, например: start "link" www.google.com && sleep 5 && start "link" www.yahoo.com, Internet Explorer откроется только с 1 вкладкой, показывающей первую ссылку (google), а затем через несколько секунд Internet Explorer откроет другое окно только с 1 вкладка, показывающая вторую ссылку (yahoo). - person Kevin Fegan; 21.09.2016
comment
@TerribleTadpole - Возможно, это сработает, если я изменил настройки IE для всплывающих окон и / или открылся в новом окне / вкладке (или других настройках), но у меня эти настройки установлены так, как мне нравятся, для общего использования браузера, и я бы не хотел чтобы изменить это, просто чтобы скрипт batch заработал. - person Kevin Fegan; 21.09.2016

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

JavaScript
Создайте файл с таким именем, как: "urls.js":

var navOpenInNewWindow = 0x1;
var navOpenInNewTab = 0x800;
var navOpenInBackgroundTab = 0x1000;

var intLoop = 0;
var intArrUBound = 0;
var navFlags = navOpenInBackgroundTab;
var arrstrUrl = new Array(3);
var objIE;

    intArrUBound = arrstrUrl.length;

    arrstrUrl[0] = "http://bing.com/";
    arrstrUrl[1] = "http://google.com/";
    arrstrUrl[2] = "http://msn.com/";
    arrstrUrl[3] = "http://yahoo.com/";

    objIE = new ActiveXObject("InternetExplorer.Application");
    objIE.Navigate2(arrstrUrl[0]);

    for (intLoop=1;intLoop<=intArrUBound;intLoop++) {

        objIE.Navigate2(arrstrUrl[intLoop], navFlags);

    }

    objIE.Visible = true;
    objIE = null;


Сценарий VB
Создайте файл с таким именем, как: "urls.vbs":

Option Explicit

Const navOpenInNewWindow = &h1
Const navOpenInNewTab = &h800
Const navOpenInBackgroundTab = &h1000

Dim intLoop       : intLoop = 0
Dim intArrUBound  : intArrUBound = 0
Dim navFlags      : navFlags = navOpenInBackgroundTab

Dim arrstrUrl(3)
Dim objIE

    intArrUBound = UBound(arrstrUrl)

    arrstrUrl(0) = "http://bing.com/"
    arrstrUrl(1) = "http://google.com/"
    arrstrUrl(2) = "http://msn.com/"
    arrstrUrl(3) = "http://yahoo.com/"

    set objIE = CreateObject("InternetExplorer.Application")
    objIE.Navigate2 arrstrUrl(0)

    For intLoop = 1 to intArrUBound

        objIE.Navigate2 arrstrUrl(intLoop), navFlags

    Next

    objIE.Visible = True
    set objIE = Nothing


Выбрав JavaScript или VB Script, у вас будет несколько вариантов:

Если ваши URL-адреса статические:

1) Вы можете написать файл сценария "JS / VBS" (см. Выше), а затем просто вызвать его из пакетного сценария.

Из пакетного сценария (или командной строки) вызовите сценарий "JS / VBS" следующим образом:

cscript //nologo urls.vbs
cscript //nologo urls.js


Если URL-адреса меняются нечасто:

2) Вы можете настроить пакетный сценарий для записи сценария "JS / VBS" на лету, а затем вызвать его.


Если URL-адреса могут каждый раз отличаться:

3) Используйте сценарии «JS / VBS» (см. Ниже) и передайте URL-адреса страниц, которые нужно открыть, в качестве аргументов командной строки:

JavaScript
Создайте файл с таким именем, как: "urls.js":

var navOpenInNewWindow = 0x1;
var navOpenInNewTab = 0x800;
var navOpenInBackgroundTab = 0x1000;

var intLoop = 0;
var navFlags = navOpenInBackgroundTab;
var objIE;
var intArgsLength = WScript.Arguments.Length;

    if (intArgsLength == 0) {

        WScript.Echo("Missing parameters");
        WScript.Quit(1);

    }

    objIE = new ActiveXObject("InternetExplorer.Application");
    objIE.Navigate2(WScript.Arguments(0));

    for (intLoop=1;intLoop<intArgsLength;intLoop++) {

        objIE.Navigate2(WScript.Arguments(intLoop), navFlags);

    }

    objIE.Visible = true;
    objIE = null;


Сценарий VB
Создайте файл с таким именем, как: "urls.vbs":

Option Explicit

Const navOpenInNewWindow = &h1
Const navOpenInNewTab = &h800
Const navOpenInBackgroundTab = &h1000

Dim intLoop
Dim navFlags      : navFlags = navOpenInBackgroundTab
Dim objIE

    If WScript.Arguments.Count = 0 Then

        WScript.Echo "Missing parameters"
        WScript.Quit(1)

    End If

    set objIE = CreateObject("InternetExplorer.Application")
    objIE.Navigate2 WScript.Arguments(0)

    For intLoop = 1 to (WScript.Arguments.Count-1)

        objIE.Navigate2 WScript.Arguments(intLoop), navFlags

    Next

    objIE.Visible = True
    set objIE = Nothing


Если скрипт вызывается без каких-либо параметров, они вернут %errorlevel%=1, в противном случае они вернут %errorlevel%=0. Проверка на «действительность» или «доступность» любого из URL-адресов не производится.


Из пакетного сценария (или командной строки) вызовите сценарий "JS / VBS" следующим образом:

cscript //nologo urls.js "http://bing.com/" "http://google.com/" "http://msn.com/" "http://yahoo.com/"
cscript //nologo urls.vbs "http://bing.com/" "http://google.com/" "http://msn.com/" "http://yahoo.com/"

Или даже:

cscript //nologo urls.js "bing.com" "google.com" "msn.com" "yahoo.com"
cscript //nologo urls.vbs "bing.com" "google.com" "msn.com" "yahoo.com"


Если по какой-то причине вы хотите запустить их с помощью «wscript», не забудьте использовать «start / w», чтобы коды выхода (% errorlevel%) были возвращены в ваш пакетный сценарий:

start /w "" wscript //nologo urls.js "url1" "url2" ...
start /w "" wscript //nologo urls.vbs "url1" "url2" ...


Изменить: 21 сентября 2016 г.

Был комментарий, что мое решение слишком сложное. Я не согласен. Вы выбираете решение JavaScript, или решение VB Script (не оба), и каждая из них содержит всего около 10 строк фактического кода (меньше, если вы исключите проверку ошибок / создание отчетов). , плюс несколько строк для инициализации констант и переменных.

Как только вы решили (JS или VB), вы пишете этот скрипт один раз, а затем вызываете этот скрипт из batch, передавая URLs, в любое время, когда хотите его использовать, например:

cscript //nologo urls.vbs "bing.com" "google.com" "msn.com" "yahoo.com"

Причина, по которой я написал этот ответ, заключается в том, что все остальные ответы, которые работают для некоторых людей, не будут работать для других, в зависимости от:

  1. Текущие настройки Internet Explorer для «открывать всплывающие окна в новой вкладке», «открывать в текущем / новом окне / вкладке» и т. Д. Если у вас уже есть эти настройки, которые вам нравятся для обычного просмотра, большинство людей найдут это нежелательно менять эти настройки взад и вперед, чтобы скрипт заработал.
  2. Их поведение (может быть) непоследовательно в зависимости от того, было ли уже открыто окно IE до открытия «новых» ссылок. Если бы уже было открыто окно IE (возможно, с большим количеством открытых вкладок), тогда все новые вкладки также были бы добавлены туда. Это может быть нежелательно.

Предложенное мной решение не имеет этих проблем и должно вести себя одинаково, независимо от каких-либо настроек IE или существующих IE Windows. (Пожалуйста, дайте мне знать, если я ошибаюсь в этом, и я постараюсь исправить это.)

person Kevin Fegan    schedule 06.08.2014
comment
Это слишком сложно. Вы можете сделать это просто в пакетном скрипте CMD. Я добавил решение как комментарий к отмеченному ответу. - person Terrible Tadpole; 15.09.2016
comment
@TerribleTadpole - Я попробовал предложенное вами решение в виде комментария, и у меня это не сработало. Я оставил там комментарий с подробностями. Даже если это сработает, есть проблемы: 1) Если перед первой командой start было открыто окно IE (возможно, со многими открытыми вкладками), тогда все новые вкладки также были бы добавлены туда. Это может быть нежелательно. 2) Чтобы заставить его работать для этого batch, вероятно, потребуется изменить настройки IE для всплывающих окон и / или открыть в новом окне / вкладке. Эти изменения неприятны, если у вас уже есть IE, настроенный так, как вам обычно нравится. - person Kevin Fegan; 21.09.2016
comment
Я искал что-то подобное, и примеры делают именно то, что я надеялся. Однако, когда я заменяю URL-адреса и запускаю любой из обоих сценариев, первые два URL-адреса фактически открываются, а затем возникает ошибка Unspecified в строке 26, символ 9 (код 80004005). На самом деле я пытаюсь открыть четыре локальных URL-адреса; три из них http: // 172 .... xbap и один https: //.....loc/. Однако любая их комбинация (даже если она всего в четыре раза больше адреса .loc) приводит к этой ошибке после открытия первых двух URL-адресов / вкладок. Интересно, есть ли решение или способ замедлить скрипт ... - person KuronosuKami; 12.06.2021
comment
@KuronosuKami ​​- Вы не указали, какой браузер и версию браузера вы используете. Это решение было написано более семи лет назад специально для Internet Explorer, вероятно, IE версии 8 или 9. Я не уверен, насколько хорошо оно работает с более поздними версиями или другими браузерами, такими как Chrome или Edge. Сообщите мне, на какой браузер и версию браузера вы настроили таргетинг, и я постараюсь найти для вас решение. Я также понимаю, что это работает для вас сейчас (июнь 2021 г.), если вы используете URL-адреса, которые я упомянул в качестве примеров в ответе: "bing.com", "google.com", "msn.com", "yahoo.com"? - person Kevin Fegan; 17.06.2021

Спасибо за подсказку, Роджер.

Для меня это сработало, как показано ниже:

@echo off

start /d "" IEXPLORE.EXE www.google.com

start /d "" IEXPLORE.EXE www.yahoo.com

С настройками в Internet Explorer 8:

  • всегда открывать всплывающие окна в новой вкладке
  • новая вкладка в текущем окне

[email protected]

person Community    schedule 21.08.2009

Конечно, это старый пост, но только для людей, которые найдут его через поисковик.

Другое решение - запустить его так для IE9 и более поздних версий.

iexplore.exe" -noframemerging http://google.com
iexplore.exe" -noframemerging http://gmail.com

-noframemerging означает, что IE запускается независимо. Например, если вы хотите запустить 2 браузера и войти в систему под разными именами, это не сработает, если вы просто запустите 2 IE. Но с -noframemerging работать будет.

-noframemerging работает для IE9 и более поздних версий, для ранних версий, таких как IE8, -nomerge

Обычно я создаю 1 bat-файл вроде этого run_ie.bat

"c:\Program Files (x86)\Internet Explorer\iexplore.exe" -noframemerging %1

и я создаю еще один файл летучей мыши, например, run-noframemergingie.bat

start run_ie.bat http://google.com
start run_ie.bat http://yahoo.com
person Zlelik    schedule 12.02.2015

Это сработало для меня:

start /d IEXPLORE.EXE www.google.com
start /d IEXPLORE.EXE www.yahoo.com

Но почему-то открыли их в Firefox вместо этого?!?

Я пробовал это, но он просто открывал сайты в двух разных окнах:

start /d "C:\Program Files\Internet Explorer" IEXPLORE.EXE www.google.com
start /d "C:\Program Files\Internet Explorer" IEXPLORE.EXE www.yahoo.com
person Sam M    schedule 21.04.2010
comment
См. help start в cmd.exe: параметр аргумента /d - это путь к начальному каталогу, то есть то, что нужно установить для текущего каталога перед запуском команды. Ваша первая команда говорит: "Запустите www.google.com" после установки текущего каталога на IEXPLORE.EXE. Использование start только с URL-адресом запускает все, что вы настроили в качестве предпочтительного веб-браузера; поэтому он открыл Firefox. - person Stephen P; 21.10.2010

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

В IE7, похоже, есть опция «Повторно использовать окна для запуска ярлыков (когда просмотр с вкладками отключен)».

person Daniel Plaisted    schedule 09.10.2008

Спасибо, Марсело. Это сработало для меня. Я хотел открыть новое окно IE и открыть в нем две вкладки, поэтому я изменил код:

start iexplore.exe website
PING 1.1.1.1 -n 1 -w 2000 >NUL 
START /d iexplore.exe website
person Emi    schedule 21.10.2010

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

@echo off
start /d iexplore.exe http://google.com
PING 1.1.1.1 -n 1 -w 2000 >NUL
START /d iexplore.exe blablabla

замените blablabla другим адресом

person Marcelo    schedule 11.09.2010

Верхний ответ почти правильный, но вам также нужно добавить амперсанд в конце каждой строки. Например, напишите командный файл:

start /d "~\iexplore.exe" "www.google.com" & 
start /d "~\iexplore.exe" "www.yahoo.com" &
start /d "~\iexplore.exe" "www.blackholesurfer.com" &

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

person Daniel Hudsky    schedule 09.06.2020