Как запустить несколько окон / вкладок Internet Explorer из командного файла? - PullRequest
18 голосов
/ 09 октября 2008

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

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

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

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

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

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

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

Ответы [ 8 ]

36 голосов
/ 09 октября 2008

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

@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
6 голосов
/ 06 августа 2014

Вы можете использовать любой из этих двух сценариев, чтобы открывать 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 Script
Создайте файл с именем, например: "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 Script
Создайте файл с именем, например: "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. (Пожалуйста, дайте мне знать, если я ошибаюсь по этому поводу, и я постараюсь это исправить.)

4 голосов
/ 22 августа 2009

Спасибо за отзыв Роджер.

Для меня это работает так:

@echo off

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

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

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

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

marcelo_linhares@hotmail.com

2 голосов
/ 12 февраля 2015

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

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

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

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

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

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

и я создаю другой файл bat, как этот run_2_ie.bat

start run_ie.bat http://google.com
start run_ie.bat http://yahoo.com
0 голосов
/ 21 октября 2010

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

start iexplore.exe website
PING 1.1.1.1 -n 1 -w 2000 >NUL 
START /d iexplore.exe website
0 голосов
/ 11 сентября 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

заменить блаблаблу другим адресом

0 голосов
/ 21 апреля 2010

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

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
0 голосов
/ 09 октября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...