繁体   English   中英

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

[英]How to launch multiple Internet Explorer windows/tabs from batch file?

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

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

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

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

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

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

  • 如果我这样做了,我会为我的两个 URL 添加两个新标签(太棒了!)
  • 如果不是,我只会得到我传入的第二个 URL 的最后一个选项卡。

在您的批处理文件中试试这个:

@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

您可以使用这两个脚本中的任何一个在(单个)新 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" ,您有几个选择:

如果您的网址是静态的:

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 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。 (如果我对此有错误,请告诉我,我会尽力解决。)

感谢罗杰的提示。

对我来说,它的工作方式如下:

@echo off

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

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

使用 Internet Explorer 8 中的设置:

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

marcelo_linhares@hotmail.com

当然,这是一个旧帖子,但只适用于通过搜索引擎找到它的人。

另一种解决方案是为 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

我创建了另一个像这样的 bat 文件 run_2_ie.bat

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

这对我有用:

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

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

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

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

谢谢马塞洛。 这对我有用。 我想打开一个新的 IE 窗口并在其中打开两个选项卡,所以我修改了代码:

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

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

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

&符号允许提示返回到外壳并启动另一个选项卡。 这只是一个 windows 解决方案,但&符号在 linux shell 中具有相同的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM