Batch - браузер по умолчанию? - PullRequest
16 голосов
/ 10 сентября 2010

Есть ли способ использовать командный файл для поиска браузера по умолчанию на моем компьютере?

Ответы [ 7 ]

36 голосов
/ 09 марта 2012

Просто используйте

начало www.google.com

См. здесь

5 голосов
/ 10 сентября 2010

Если вы ищете решение для 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 голосов
/ 04 мая 2015

Надеюсь, это кому-нибудь поможет.Мне нужно было запустить браузер по умолчанию с 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
2 голосов
/ 12 сентября 2010

Невозможно сделать это на 100% правильно в пакетном файле, поскольку команда по умолчанию может исходить из COM-объекта, а не строки в реестре ( MayChangeDefaultMenu заставит IContextMenu вызываться для двойного щелкает и может изменить действие по умолчанию)

Вот некоторый код, который пытается сделать правильные вещи (открытый ключ открыт, он действительно должен быть первым подразделом, но мне не хотелось иметь с этим дело)

@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».

Если все, что вы действительно хотите сделать, это открыть URL, все, что вам нужно, это start http://example.com Если вы хотите открыть браузер, но не указывать конкретный URL-адрес, уродливый хак типа start "" http://about:blank может сработать.

1 голос
/ 07 февраля 2012

Ответ Энди Э, похоже, не работает для меня, он открывает IE вместо Chrome.
Но, если я использую http вместо htmlfile, он работает.Вот так.

reg QUERY HKEY_CLASSES_ROOT\http\shell\open\command /ve
0 голосов
/ 22 ноября 2017

ответ пузыря имеет несколько предостережений.

Вот что у меня работает в гораздо большем числе случаев:

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

Единственное, что вам нужно убежать - это двойная кавычка, и вы избегаете ее, набрав ее еще раз.

Работает как минимум для протоколов http://, https:// и file:// (без строки запроса). Не работает для 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"

Хорошо, это не ошибка, а просто заблуждение. Это ожидаемое поведение. Давайте исправим это:

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"
0 голосов
/ 10 сентября 2010

Этот код устанавливает переменную окружения 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...