如何从批处理文件启动多个Internet Explorer窗口/选项卡?

时间:2008-10-09 19:36:22

标签: internet-explorer batch-file

我想要一个批处理文件来启动两个单独的程序然后关闭命令行窗口。实际上,为了澄清,我正在使用两个不同的URL启动Internet Explorer。

到目前为止,我有这样的事情:

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

我得到的是Internet Explorer的一个实例,只加载了第二个URL。似乎第二个正在取代第二个。我似乎记得一种语法,我将加载一个新的命令行窗口并传递命令以在加载时执行,但无法找到引用。

作为问题的第二部分:在编写快速批处理文件时需要保留哪些好的参考URL?

编辑:我已经标记了答案,因为它确实有效。我现在打开两个窗口,每个URL一个。 (谢谢!)有趣的是,如果没有使用原始语法的/ d方法,我会根据是否打开预先存在的Internet Explorer实例得到不同的结果。

  • 如果我这样做,我会添加两个新标签 我的两个网址(甜蜜!)
  • 如果不是,我只获得了传递的第二个网址的最后一个标签。

9 个答案:

答案 0 :(得分:36)

在批处理文件中尝试此操作:

@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

答案 1 :(得分:6)

您可以使用这两个脚本中的任何一个在(单个)新IE窗口的单独选项卡中打开URL。您可以在批处理脚本中(或在命令提示符下)调用这些脚本中的任何一个:

<强>的JavaScript
创建一个名称为的文件:&#34; urls.js&#34;

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脚本
创建一个名称为的文件:&#34; urls.vbs&#34;

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


一旦您决定&#34; JavaScript&#34; &#34; VB脚本&#34; ,您有以下几种选择:

如果您的网址是静态的:

1)您可以编写&#34; JS / VBS&#34; 脚本文件(上图),然后从批处理脚本中调用它。

在批处理脚本(或命令提示符)中,调用&#34; JS / VBS&#34; 脚本,如下所示:

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


如果网址不经常更改:

2)您可以让批处理脚本动态编写&#34; JS / VBS&#34; 脚本然后调用它。


如果每次都有不同的网址:

3)使用&#34; JS / VBS&#34; 脚本(如下)并将页面的URL传递为命令行参数:

<强>的JavaScript
创建一个名称为的文件:&#34; urls.js&#34;

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脚本
创建一个名称为的文件:&#34; urls.vbs&#34;

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 。没有检查&#34;有效性&#34;或者&#34;可用性&#34;任何网址。


在批处理脚本(或命令提示符)中,调用&#34; JS / VBS&#34; 脚本,如下所示:

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"


如果出于某种原因,你想用&#34; wscript&#34;相反,记得使用&#34; start / w&#34;所以退出代码(%errorlevel%)将返回到批处理脚本:

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

<小时/> 修改:2016年9月21日

有评论说我的解决方案太复杂了。我不同意。您选择JavaScript解决方案, VB Script解决方案(不是两者),每个解决方案只有大约10行实际代码(如果你消除了错误检查/报告),加上几行来初始化常量和变量。

一旦你决定(JS或VB),你就编写了那个一次的脚本,然后你从batch调用那个脚本,随时传递URLs想要使用它,比如:

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

我写这个答案的原因是因为所有其他答案,对一些人有用,将无法为其他人工作,具体取决于:

  1. 当前的Internet Explorer设置&#34;在新选项卡中打开弹出窗口&#34;,&#34;在当前/新窗口/选项卡中打开&#34;等等...假设您已经设置了这些设置你喜欢它们如何进行一般浏览,大多数人会发现不必来回更改这些设置以使脚本有效。
  2. 根据在&#34; new&#34;之前是否已经打开IE窗口,他们的行为是(可能)不一致链接被打开了。如果已经打开了IE窗口(可能有许多打开的选项卡),那么所有新选项卡也会被添加到那里。这可能不是所希望的。
  3. 我提供的解决方案没有这些问题,并且应该表现相同,无论是任何IE设置还是任何现有的IE Windows。 (如果我对此错了,请告诉我,我会尽力解决。)

答案 2 :(得分:4)

感谢提示罗杰。

对我来说,它的工作原理如下:

@echo off

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

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

使用Internet Explorer 8中的设置:

  • 始终在新标签页中打开弹出窗口
  • 当前窗口中的新标签

marcelo_linhares@hotmail.com

答案 3 :(得分:2)

当然这是一个老帖子,但只是为了人们如何通过搜索引擎找到它。

另一个解决方案是为IE9及更高版本

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

-noframemerging意味着独立运行IE。例如,你想运行2个浏览器并以不同的用户名登录,如果你只运行2个IE,它就无法运行。但是使用-noframemerging它会起作用。 -noframemer适用于IE9及更高版本,对于像IE8这样的早期版本,它是-nomerge

通常我创建1但文件类似于run_ie.bat

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

我创建了另一个像这个run_2_ie.bat

的bat文件
start run_ie.bat http://google.com
start run_ie.bat http://yahoo.com

答案 4 :(得分:0)

IE选项中有一个设置,用于控制是否应在现有窗口或新窗口中打开新链接。我不确定你是否可以从命令行控制它,但是改变这个选项就足够了。

在IE7中,看起来选项是“重新启动窗口以启动快捷方式(禁用选项卡式浏览时)”。

答案 5 :(得分:0)

这对我有用:

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

答案 6 :(得分:0)

试试这个让你有足够的时间让第一个进程启动..否则它会产生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

答案 7 :(得分:0)

谢谢马塞洛。这对我有用。我想打开一个新的IE窗口并打开两个标签,所以我修改了代码:

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

答案 8 :(得分:0)

最正确的答案几乎是正确的,但是您还需要在每行的末尾添加一个&符号。例如,编写批处理文件:

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

&符允许提示符返回外壳并启动另一个选项卡。 这仅是Windows解决方案,但是&符在linux shell中具有相同的作用。