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

The*_*ker 21 internet-explorer batch-file

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

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

start "~\iexplore.exe" "url1"
start "~\iexplore.exe" "url2"
Run Code Online (Sandbox Code Playgroud)

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

作为问题的第二部分:什么是一个很好的参考URL,以保持您编写快速批处理文件所需的时间?

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

  • 如果我这样做,我会为我的两个网址添加两个新标签(甜蜜!)
  • 如果不是,我只获得传入的第二个URL的最终选项卡.

Rod*_*ley 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
Run Code Online (Sandbox Code Playgroud)

  • 罗杰提出的答案对我不起作用。它确实会在 Internet Explorer 中打开 URL,但在我的情况下(使用 IE 9),即使我将 IE 选项设置为在新选项卡中打开来自其他程序的链接,它仍会在每次调用时打开一个新窗口当前窗口。:( (5认同)

Kev*_*gan 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;
Run Code Online (Sandbox Code Playgroud)


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
Run Code Online (Sandbox Code Playgroud)


一旦你决定"JavaScript""VB脚本",你有几个选择:

如果您的网址是静态的:

1)您可以编写"JS/VBS"脚本文件(上面),然后从批处理脚本中调用它.

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

cscript //nologo urls.vbs
cscript //nologo urls.js
Run Code Online (Sandbox Code Playgroud)


如果网址不经常更改:

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;
Run Code Online (Sandbox Code Playgroud)


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
Run Code Online (Sandbox Code Playgroud)


如果在没有任何参数的情况下调用脚本,则会返回这些参数%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/"
Run Code Online (Sandbox Code Playgroud)

甚至:

cscript //nologo urls.js "bing.com" "google.com" "msn.com" "yahoo.com"
cscript //nologo urls.vbs "bing.com" "google.com" "msn.com" "yahoo.com"
Run Code Online (Sandbox Code Playgroud)


如果由于某种原因,您希望使用"wscript"来运行它们,请记住使用"start/w",以便退出代码(%errorlevel%)将返回到批处理脚本:

start /w "" wscript //nologo urls.js "url1" "url2" ...
start /w "" wscript //nologo urls.vbs "url1" "url2" ...
Run Code Online (Sandbox Code Playgroud)


编辑: 2016年9月21日

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

一旦你决定(JS或VB),你就编写了一次这个脚本,然后你可以随时调用该脚本batch,传递URLs它,如:

cscript //nologo urls.vbs "bing.com" "google.com" "msn.com" "yahoo.com"
Run Code Online (Sandbox Code Playgroud)

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

  1. 当前的Internet Explorer设置为"在新选项卡中打开弹出窗口","在当前/新窗口/选项卡中打开"等等...假设您已经设置了这些设置,您希望它们如何用于一般浏览,大多数人会发现它不希望来回更改这些设置以使脚本工作.
  2. 根据在打开"新"链接之前是否已打开IE窗口,它们的行为(可能)不一致.如果已经打开了IE窗口(可能有许多打开的选项卡),那么所有新选项卡也会被添加到那里.这可能不是所希望的.

我提供的解决方案没有这些问题,并且应该表现相同,无论任何IE设置或任何现有的IE Windows.(如果我错了,请告诉我,我会尽力解决.)


小智 5

感谢小费罗杰。

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

@echo off

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

start /d "" IEXPLORE.EXE www.yahoo.com
Run Code Online (Sandbox Code Playgroud)

使用Internet Explorer 8中的设置:

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

marcelo_linhares@hotmail.com