有没有办法使用批处理文件在我的计算机上找到默认浏览器?
答案 0 :(得分:36)
答案 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"