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

21

我想要一个批处理文件来启动两个不同的程序,然后关闭命令行窗口。实际上,我是要打开两个不同URL的Internet Explorer。

目前我有类似以下的东西:

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

我得到的是只有第二个URL加载的一个Internet Explorer实例。似乎第二个URL替换了第一个。我记得有一种语法,可以加载一个新的命令行窗口,并在加载时传递要执行的命令,但找不到参考资料。

作为问题的第二部分:有哪些好的参考URL可供您在需要快速编写批处理文件时使用?

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

  • 如果有,我将得到我两个URL的两个新标签页(太棒了!)
  • 否则,我只会得到我传入的第二个URL的最后一个标签页。

此外,我认为如果你只是使用以下代码:<br/> <i> start http://www.google.com start http://www.yahoo.com </i><br/> 系统会自动选择最喜欢的浏览器打开它们。(顺便问一下,你更喜欢两个选项卡/一个浏览器还是两个窗口解决方案?) - Rodger Cooley
嗯...看来注释不喜欢HTML... - Rodger Cooley
https://stackoverflow.com/questions/26099153/open-tabs-in-internet-explorer-with-cmd/45808976#45808976 - vafylec
9个回答

39

尝试在您的批处理文件中添加以下内容:

@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
它为可执行文件提供了启动路径。 - Rodger Cooley
5
Rodger的提议对我没有用。它确实可以在Internet Explorer中打开URL,但在我的情况下(使用IE 9),每次调用它仍会打开一个新窗口,即使我已经将IE选项设置为在当前窗口中打开其他程序的链接。 :( - Jon Burchel
1
您可以通过以下方式使其按您想要的方式工作: @echo off start "link" www.google.com start "link" www.yahoo.com如果没有浏览器打开,则会使用默认浏览器调用第一个URL。如果浏览器已经打开(对于第二个及随后的命令将是这样),则URL将在新选项卡中打开。 - Terrible Tadpole
该死...每个开始命令之前都需要换行符。我无法在注释中显示它们,并且尝试编辑时间用完了。 - Terrible Tadpole
@TerribleTadpole-我无法使其工作。我尝试了 start "link" www.google.com && start "link" www.yahoo.com. Internet Explorer只打开1个选项卡,显示第二个链接(yahoo)。这正是OP所描述的情况,并且正在尝试解决。如果我在这两个start命令之间添加延迟,就像这样:start "link" www.google.com && sleep 5 && start "link" www.yahoo.com, Internet Explorer将只打开1个选项卡,显示第一个链接(google),然后几秒钟后Internet Explorer会打开另一个窗口,其中只有1个标签显示第二个链接(yahoo)。 - Kevin Fegan
@TerribleTadpole - 也许如果我更改IE设置中的“弹出窗口”和/或“在新窗口/选项卡中打开”(或其他设置),它可能会起作用,但是我已经将这些设置设置为我喜欢的一般浏览器使用方式,我不想改变它们只是为了使“批处理”脚本工作。 - Kevin Fegan

6
您可以使用以下两个脚本之一在单个新的IE窗口中打开URL。 您可以从批处理脚本(或命令提示符)中调用这些脚本中的任何一个:
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" ...


编辑: 2016年9月21日

有人评论说我的解决方案太复杂了。我不同意。你可以选择JavaScript解决方案或者VB脚本解决方案(不要两个都选),每个只有大约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窗口,都应该表现相同。(如果我的理解有误,请告诉我,我会尝试解决。)

这太过复杂了。你可以在CMD批处理脚本中简单地完成它。我已经将解决方案作为评论添加到标记答案中。 - Terrible Tadpole
@TerribleTadpole - 我尝试了你提出的解决方案,但对我没有用。我在那里留下了一条带有详细信息的评论。即使它起作用了,也存在以下问题:1)如果在第一个“start”命令之前有一个IE窗口打开(可能有许多打开的选项卡),那么所有新选项卡也将添加到其中。这可能不是所期望的。2)使其适用于此“批处理”可能需要更改IE设置以进行“弹出窗口”和/或“在新窗口/选项卡中打开”。如果您已经设置了IE以按照通常的方式工作,则这些更改并不好。 - Kevin Fegan
一直在寻找这样的东西,示例确切地做到了我所希望的。然而,当我替换URL并运行其中任何一个脚本时,前两个URL实际上被打开,然后在第26行第9个字符(代码80004005)处出现“未指定错误”。 我实际上正在尝试打开四个本地URL;其中三个是“http:// 172....xbap”,另一个是“https://.....loc/”。但是,无论它们的组合方式如何(即使只是四次.loc地址),在打开前两个URL /选项卡后都会导致该错误。 我想知道是否有解决方案或减慢脚本速度的方法... - KuronosuKami
@KuronosuKami - 你没有提到你使用的是哪个浏览器和浏览器版本。这个解决方案是7年前编写的,专门针对Internet Explorer,可能是IE 8或9版本。我不确定它在后来的版本或其他浏览器(如Chrome或Edge)中的效果如何。让我知道你要针对哪个浏览器和浏览器版本,我会尝试为你找到一个解决方案。此外,如果您在答案中使用我提到的示例URL:“bing.com”,“google.com”,“msn.com”,“yahoo.com”,那么我是否理解这对您现在(2021年6月)有效? - Kevin Fegan

5
感谢Rodger的建议。
对我而言,以下方法可行:
@echo off

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

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

在Internet Explorer 8中的设置:

  • 总是在新标签页中打开弹出窗口
  • 在当前窗口中打开新标签页

marcelo_linhares@hotmail.com


4

当然,这是一篇旧文章,但是对于那些通过搜索引擎找到它的人来说还是有用的。

另一个解决方案是在IE9及更高版本中这样运行它:

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

-noframemerging 的意思是独立运行IE。例如,如果您想要运行2个浏览器并使用不同的用户名登录,如果只运行2个IE,则无法正常工作。但使用 -noframemerging 就可以正常工作。

-noframemerging 适用于IE9及更高版本,对于早期版本(如IE8),则为 -nomerge

通常我会创建一个名为 run_ie.bat 的批处理文件。

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

我创建了另一个类似于run_2_ie.bat的批处理文件

start run_ie.bat http://google.com
start run_ie.bat http://yahoo.com

1
这对我有用:
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

2
在cmd.exe中查看“help start”:/d参数的参数是启动目录的路径,也就是在启动命令之前要设置当前目录。你的第一个命令的意思是“在将当前目录设置为IEXPLORE.EXE之后启动www.google.com”。只使用URL使用`start`会启动您配置为首选Web浏览器的任何内容;这就是为什么它打开了Firefox的原因。 - Stephen P

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


0

谢谢Marcelo。这个对我有帮助。我想打开一个新的IE窗口并在其中打开两个标签页,因此我修改了代码:

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

0

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

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


0

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

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

通过使用 & 符号,可以让提示符返回到 shell 并启动另一个选项卡。这仅适用于 Windows 解决方案,但在 Linux shell 中 & 符号具有相同的效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接