Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理-默认浏览器?_Batch File - Fatal编程技术网

Batch file 批处理-默认浏览器?

Batch file 批处理-默认浏览器?,batch-file,Batch File,是否有一种方法可以使用批处理文件在我的计算机上查找默认浏览器?如果您正在寻找Windows.bat解决方案,这应该适用于Windows 2000及更高版本: reg QUERY HKEY_CLASSES_ROOT\htmlfile\shell\open\command /ve 结果(在我的Windows计算机上) 此代码将环境变量browser设置为FirefoxURL,这为您提供了一个良好的指示器: @ECHO OFF REG QUERY HKCU\Software\Microsoft\Wi

是否有一种方法可以使用批处理文件在我的计算机上查找默认浏览器?

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

reg QUERY HKEY_CLASSES_ROOT\htmlfile\shell\open\command /ve
结果(在我的Windows计算机上)


此代码将环境变量
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

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

下面是一些试图做正确事情的代码(是开放的,它确实应该是第一个子键,但我不想处理它)

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

如果你真正想做的就是打开一个URL,那么你所需要的就是
starthttp://example.com

如果您想打开浏览器,但不想打开特定的URL,请使用类似
start''的难看的hackhttp://about:blank
可能会奏效。

安迪·E的答案似乎对我不起作用,它打开的是IE而不是Chrome。
但是,如果我使用http而不是htmlfile,它会这样做。像这样

reg QUERY HKEY_CLASSES_ROOT\http\shell\open\command /ve
简单使用

启动www.google.com


请看

我希望这对某人有所帮助。我需要用一个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

bubble的答案有一些警告

这是在更多情况下对我有效的方法: 唯一需要转义的是双引号,您可以通过再次键入来转义它

至少适用于协议
http://
https://
文件://
(无查询字符串)。不适用于
ftp://
URL(它将它们作为网络驱动器打开)


已接受答案的失败案例 首先,网页必须以
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"
好吧,这不是一个bug,只是一个误导。这是预期的行为。让我们修复它:

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

rem FAILS!
start "" "google.com"
The system cannot find the file google.com.
因此,我们必须提供一个应该启动的可执行文件。您可以在这里看到超长的答案,这些答案在获取默认浏览器的路径时无论成功与否都是成功的。但更简单、更防弹的方法是使用
explorer
启动网页。但由于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"
谢谢你,罗伯

@罗布的答案很接近,但它仍然只是拉动程序。此选项将设置浏览器名称,该名称由
browser
变量中的ProgId报告(并不总是您所期望的),特定的
动词用作
browserverb
,cmd路径用作
browsercmd

setlocal enableDelayedExpansion
:: parse the ProgId
FOR /F "usebackq tokens=1,2,* delims==" %%A IN (`REG QUERY "HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" /v ProgId 2^>NUL ^| more +2`) DO (
    SET browserstub=%%C
    :: parse for Class information
    FOR /F "usebackq tokens=1,2,* delims==" %%R IN (`REG QUERY "HKCR\!browserstub!" /v AppUserModelId 2^>NUL`) DO SET "browser=%%T"
    FOR /F "usebackq tokens=1,2,* delims==" %%R IN (`REG QUERY "HKCR\!browserstub!\shell" /ve 2^>NUL`) DO SET "browserverb=%%T"
    FOR /F "usebackq tokens=1,2,* delims==" %%R IN (`REG QUERY "HKCR\!browserstub!\shell\!browserverb!\command" /ve 2^>NUL`) DO SET "browsercmd=%%T"
)
:: display results
SET browser

哪个操作系统?哪个版本?如果linux,哪个发行版?不仅仅是批处理windows?这不是100%正确的,它在大多数情况下都能工作(你可能想检查HTTP,因为.html可能指向htmlfile以外的东西,“open”可能不是默认动词等)@Anders:听起来很正确,事实上HTTP是我检查的第一个。然而,当我在Windows7机器上检查HTTP时,它指向Firefox,而IE是我的默认浏览器。启动url()打开IE,而不是Firefox。FWIW,我喜欢你的答案:-)+1。@总之,我注意到了同样的事情,但htmlfile似乎总是为我指向iexplorer,不管我是将firefox还是chrome设置为默认值。这只会将它与
.html
文件关联。那
.htm
文件呢?那
.url
文件呢?http
http
地址呢?这个答案说明了手动操作的问题:它可能不完整,您可能会错过很多。我注意到我的答案最近获得了更多的选票,但它可能无法回答查找默认浏览器的实际问题。但它确实解决了如何使用批处理文件打开默认浏览器的问题。区别很微妙但很重要。有时回答不同问题的答案是大多数人来这里寻找的:)也适用于机器上的HTML文件。例如,我有一个批处理脚本,它将XSLT应用于XML文件并将其转储到
%TEMP%.\msxslout.html
。因此,
start%TEMP%.\msxslout.html
在我的默认web浏览器中打开它。@p0lar_-bear打开html页面的方法似乎只有在其路径和文件名未被引用时才起作用-因此它不能包含任何空格。但是,可以通过将带引号的额外空字符串作为第一个参数使其工作,例如:
start”““filename with spaces.html”
。对于本地主机,请使用
starthttp://localhost[:port]
,其中port是可选的-普通的
启动本地主机
无法实现此功能。那么
.html
文件呢?那
.htm
文件呢?那么
.url
书签呢?等等?是的,它确实有问题,和安迪的一样。查看他的答案以查看它们。@Synetech.url的默认浏览器可能与http等不同,但这种配置非常少见,在这种情况下,实际上没有默认浏览器,有多个,因此没有100%正确的答案(除非您询问特定类型,否则我的示例必须选择一个并使用.html)。没有程序应该真正关心默认值是什么,它应该只使用ShellExecute/start并让Windows处理它。想要在批处理文件中执行此操作,当然只需
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.
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"
setlocal enableDelayedExpansion
:: parse the ProgId
FOR /F "usebackq tokens=1,2,* delims==" %%A IN (`REG QUERY "HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" /v ProgId 2^>NUL ^| more +2`) DO (
    SET browserstub=%%C
    :: parse for Class information
    FOR /F "usebackq tokens=1,2,* delims==" %%R IN (`REG QUERY "HKCR\!browserstub!" /v AppUserModelId 2^>NUL`) DO SET "browser=%%T"
    FOR /F "usebackq tokens=1,2,* delims==" %%R IN (`REG QUERY "HKCR\!browserstub!\shell" /ve 2^>NUL`) DO SET "browserverb=%%T"
    FOR /F "usebackq tokens=1,2,* delims==" %%R IN (`REG QUERY "HKCR\!browserstub!\shell\!browserverb!\command" /ve 2^>NUL`) DO SET "browsercmd=%%T"
)
:: display results
SET browser