21

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

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

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

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

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

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

  • 如果我这样做,我会为我的两个 URL 添加两个新选项卡(真棒!)
  • 如果没有,我将只获得我传入的第二个 URL 的最后一个选项卡。
4

9 回答 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
于 2008-10-09T19:54:31.080 回答
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",你有几个选择:

如果您的网址是静态的:

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 窗口如何,其行为都应该相同。(如果我对此有误,请告诉我,我会尽力解决。)

于 2014-08-06T19:58:33.853 回答
5

感谢罗杰的提示。

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

@echo off

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

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

使用 Internet Explorer 8 中的设置:

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

marcelo_linhares@hotmail.com

于 2009-08-21T23:57:57.697 回答
4

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

另一种解决方案是为 IE9 及更高版本运行它

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

-noframemerging意味着独立运行IE。例如,如果您想运行 2 个浏览器并以不同的用户名登录,那么如果您只运行 2 个 IE,它将无法正常工作。但有了-noframemerging它就可以了。

-noframemerging适用于 IE9 及更高版本,对于 IE8 等早期版本-nomerge

通常我会创建 1 个像这样 run_ie.bat 的 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
于 2015-02-12T10:47:59.203 回答
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
于 2010-04-21T13:34:28.420 回答
0

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

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

于 2008-10-09T19:51:35.610 回答
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

于 2010-09-11T04:06:40.307 回答
0

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

start iexplore.exe website
PING 1.1.1.1 -n 1 -w 2000 >NUL 
START /d iexplore.exe website
于 2010-10-21T18:18:57.013 回答
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 中具有相同的效果。

于 2020-06-09T18:56:22.910 回答