批处理 - 默认浏览器?

时间:2010-09-10 13:13:57

标签: batch-file

有没有办法使用批处理文件在我的计算机上找到默认浏览器?

8 个答案:

答案 0 :(得分:36)

只需使用

  

启动www.google.com

请参阅here

答案 1 :(得分:5)

如果您正在寻找Windows .bat解决方案,这应该适用于Windows 2000及更高版本:

reg QUERY HKEY_CLASSES_ROOT\htmlfile\shell\open\command /ve

结果(在我的Windows机器上)

HKEY_CLASSES_ROOT\htmlfile\shell\open\command
(Default)    REG_SZ    "C:\Program Files (x86)\Internet Explorer\iexplore.exe" -nohome

有关详细信息,请参阅REG.EXE帮助:

REG /?

答案 2 :(得分:2)

在批处理文件中不可能100%正确,因为默认命令可能来自COM对象而不是注册表中的字符串(MayChangeDefaultMenu将强制调用IContextMenu进行双击可以改变默认动作)

以下是一些尝试做正确事情的代码(fallback verb是开放的,它确实应该是第一个子密钥,但我不想处理那个)

@echo off
setlocal ENABLEEXTENSIONS
set progid=htmlfile&set verb=open&set browsercmd=
FOR /F "skip=2 tokens=2 delims=_" %%a IN ('2^>nul REG QUERY "HKCR\.html" /ve^|find /V ""^|find /V "HKEY_"') DO FOR /F "tokens=1,*" %%b IN ("%%~a") DO if not "%%~c"=="" set progid=%%~c
FOR /F "skip=2 tokens=2 delims=_" %%a IN ('2^>nul REG QUERY "HKCR\%progid%\shell" /ve^|find /V ""^|find /V "HKEY_"') DO FOR /F "tokens=1,*" %%b IN ("%%~a") DO if not "%%~c"=="" set verb=%%~c
FOR /F "skip=2 tokens=2 delims=_" %%a IN ('2^>nul REG QUERY "HKCR\%progid%\shell\%verb%\command" /ve^|find /V ""^|find /V "HKEY_"') DO FOR /F "tokens=1,*" %%b IN ("%%~a") DO if not "%%~c"=="" set browsercmd=%%c

echo.DefaultBrowser=%browsercmd%

这段代码可能有问题,但至少它试图找到正确的动词。您还必须处理返回的字符串可能包含“%1”的事实。

如果您真的要打开一个网址,那么您只需要start http://example.com 如果你想打开浏览器而不是特定的URL,那么像start "" http://about:blank这样的丑陋黑客可能会起作用。

答案 3 :(得分:2)

我希望这有助于某人。我需要用html文件启动默认浏览器。

@echo off
setlocal

rem setup a default browser in case we fail
set default_browser=C:\Program Files\Internet Explorer\iexplore.exe

rem look in the HKEY_CLASSES_ROOT\htmlfile\shell\open\command registry for the default browser
for /f "tokens=*" %%a in ('REG QUERY HKEY_CLASSES_ROOT\htmlfile\shell\open\command /ve ^| FIND /i "default"') do (
   set input=%%a
)
setlocal enableDelayedExpansion

rem parse the input field looking for the second token
for /f tokens^=^2^ eol^=^"^ delims^=^" %%a in ("!input!") do set browser=%%a

setlocal disableDelayedExpansion

rem this may not be needed, check if reg returned a real file, if not unset browser
if not "%browser%" == "" if not exist "%browser%" set browser=
if "%browser%"=="" set browser=%default_browser%
"%browser%" index.html
endlocal

答案 4 :(得分:1)

Andy E的答案对我来说似乎不起作用,它打开IE而不是Chrome 但是,如果我使用http而不是htmlfile它。像这样。

reg QUERY HKEY_CLASSES_ROOT\http\shell\open\command /ve

答案 5 :(得分:1)

谢谢@Rob。

@Rob的答案很接近,但它仍然只提取ProgId。这将在browser变量中设置ProgId报告的浏览器名称(并非总是您期望的名称),将特定的verb用作browserverb,将cmd路径设置为{{ 1}}:

browsercmd

答案 6 :(得分:0)

此代码会将环境变量browser设置为FirefoxURL,这为您提供了一个很好的指标:

@ECHO OFF
REG QUERY HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice > browser.txt
FOR /F "skip=2 tokens=*" %%G IN (browser.txt) DO ( SET browser=%%G )
SET browser=%browser:~20%
ECHO Is: %browser%

它通过查询注册表到文本文件,然后跳过前两行(用于您的目的无用),然后从剩余行的第20个字符开始的文本。这给你FirefoxURL

答案 7 :(得分:0)

泡沫的回答有一些警告。

这对我来说在更多情况下有效:

start "" explorer "protocol://your.complicated/url?foo=bar"

你唯一要逃避的是双引号,你可以再次输入它来逃避它。

至少适用于协议http://https://file://(不带查询字符串)。不适用于ftp://个网址(它会将其作为网络驱动器打开)。

接受答案的失败案例

首先,网页必须以www.

开头
rem Works
start www.google.com

rem FAILS!
start google.com
The system cannot find the file google.com

rem FAILS!
start translate.google.com
The system cannot find the file translate.google.com

这可以通过预先http://

来解决
rem Works
start http://google.com

rem Works even for file:// protocol
start file://C:/test/main.html

rem Works - you can even pass QSA
start http://google.com?foo=bar

rem FAILS! outch, you have to escape ampersands
start http://google.com?foo=bar&baz=baz
'baz' is not recognized as an internal or external command, operable program or batch file.

rem FAILS! but QSA only works for http/s URLs; for file:// protocol, it is ignored
start file://D:/Programování/lumix-link/Control.html?foo=bar
rem opens file://D:/Programování/lumix-link/Control.html

有人可能会,例如考虑用双引号括起网页(以避免误解某些字符)。然后它失败,而是尝试使用给定的字符串作为名称打开另一个CMD.exe:

rem FAILS!
start "http://google.com"

好的,这不是一个错误,只是一个误导。这是预期的行为。让我们解决它:

rem Works
start "" "http://google.com"

rem FAILS!
start "" "google.com"
The system cannot find the file google.com.

因此我们必须提供应该启动的可执行文件。您可以在此处看到超长答案,这些答案在获取默认浏览器的路径方面会变得更好或更差。但是,使用explorer启动网页更简单,更有防御性。但是,由于资源管理器决定根据协议启动哪个应用程序,您必须使用协议前缀。那就是它!

rem FAILS!
rem start "" explorer "google.com"

rem Works
rem start "" explorer "http://google.com"

rem Works
rem start "" explorer "http://google.com?foo=bar"

rem FAILS! QSA still not supported on file:// URLs
rem start "" explorer "file://C:/test/main.html?foo=bar"