【问题标题】:Batch file to find list of installed browsers查找已安装浏览器列表的批处理文件
【发布时间】:2013-07-16 04:09:15
【问题描述】:

我需要通过运行 .bat 文件来检查任何 Windows 系统中的可用浏览器。批处理文件应该能够检查系统中是否安装了 Firefox 和 Chrome 或任何其他浏览器。否则我想打开默认浏览器。

if exist "C:\Program Files(x86)\Mozilla Firefox\firefox.exe" start firefox.exe

这是一种方法,但如果安装在其他位置完成,它将不起作用。

【问题讨论】:

标签: batch-file


【解决方案1】:

我建议使用HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet 键。它列出了已在系统上注册的 Web 浏览器客户端,并提供了默认的浏览器客户端以及在系统上的何处可以找到它们。

更多详情请见http://msdn.microsoft.com/en-us/library/windows/desktop/dd203067(v=vs.85).aspx

示例:

这里只是我拼凑的一个例子来说明如何使用这些信息。根据需要或根据您的要求进行调整。

@echo off
setlocal EnableDelayedExpansion
:Menu
echo 32-bit
set "Count=1"
for /f "tokens=2,*" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Clients\StartMenuInternet" /ve 2^>nul') do set "Default=%%B"
for /f "skip=3 delims=" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Clients\StartMenuInternet" 2^>nul') do (
    if "%%~nxA"=="%Default%" (
        echo !Count!. %%~nA [Default]
    ) else (
        echo !Count!. %%~nA
    )
    set /a "Count+=1"
)
echo.
echo 64-bit if 32-bit above, else 32-bit
for /f "tokens=2,*" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet" /ve 2^>nul') do set "Default=%%B"
for /f "skip=3 delims=" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet" 2^>nul') do (
    if "%%~nxA"=="%Default%" (
        echo !Count!. %%~nA [Default]
    ) else (
        echo !Count!. %%~nA
    )
    set /a "Count+=1"
)
echo.
:Input
set "Input="
set /p "Input=> Select a Browser: "
if not defined Input goto Input
set "Input=%Input:"=%"
set "Count=1"
:: NOTE if the browser name is typed out and matching on the name then the last match will be chosen.
:: As it is currently setup this means that the 32-bit version will always win on a name match.
for /f "skip=3 delims=" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet" 2^>nul') do (
    if /i "%Input%"=="%%~nA" set "Choice=%%~A"
    if "%Input%"=="!Count!" set "Choice=%%~A"
    set /a "Count+=1"
)
for /f "skip=3 delims=" %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Clients\StartMenuInternet" 2^>nul') do (
    if /i "%Input%"=="%%~nA" set "Choice=%%~A"
    if "%Input%"=="!Count!" set "Choice=%%~A"
    set /a "Count+=1"
)
if not defined Choice goto Menu
for /f "tokens=2,*" %%A in ('reg query "%Choice%\shell\open\command" /ve 2^>nul') do set "Command=%%~B"
start "Browser" "%Command%"
endlocal
echo Done
pause>nul

【讨论】:

  • 在 64 位机器上,信息位于 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Clients\StartMenuInternet 下。不过我会编辑我的答案
  • 正在寻找浏览器,我需要选择一个浏览器并运行它们,我该怎么做。你能建议我怎么做吗
  • 是的,它工作得很好,但我不想手动输入来选择浏览器。我需要它遵循优先顺序。就像如果 chrome 存在然后启动 chrome 如果不检查并启动 firefox 如果不​​是两者,那么我想启动默认浏览器,这将是 internet explorer
【解决方案2】:

您最终需要以管理员身份启动它,因为它会从注册表导出值。我没有使用 REG 命令来实现最大兼容性:

@echo off
START /W REGEDIT /E "%Temp%.\BROW.reg" HKEY_CURRENT_USER\Software\Classes

setlocal enableDelayedExpansion
for /f "tokens=4 delims=\" %%B in ('type %Temp%.\BROW.reg ^| findstr  /E  "HTML\shell]"') do (
 set "browser=%%B"
 echo !browser:~0,-4!
)
endlocal

del /Q /F "%Temp%.\BROW.reg"

编辑

@echo off
setlocal enableExtensions

echo.
echo.
echo INSTALLED BROWSERS
echo.
echo.

rem :::::::::::::::::::::::::::::::::::::::::::::::::::::
rem :: exporting registry values for installed browsers
rem :::::::::::::::::::::::::::::::::::::::::::::::::::::

rem for 64 bit systems
START /W REGEDIT /E "%Temp%\BROW3.reg" HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Clients\StartMenuInternet
rem for 32 bit systems
if not exist "%Temp%\BROW3.reg" START /W REGEDIT /E "%Temp%\BROW3.reg" HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet

setLocal enableDelayedExpansion
for /f "tokens=*" %%B in ('type "%Temp%\BROW3.reg" ^| findstr /E "DefaultIcon]"') do (
  rem extracting browser name from icon path
  set "browser=%%B"
  rem removing \DefaultIcon] string
  set "browser=!browser:\DefaultIcon]=!"
  rem get the browser name
  for %%P in ("!browser!") do echo %%~nP
)
endLocal

echo.
echo.
echo EXECUTABLES PATHS
echo.
echo.

setLocal enableDelayedExpansion
for /f "tokens=* delims=@=" %%B in ('type "%Temp%\BROW3.reg" ^| findstr /B "@" ^| findstr /E ".exe\\\",0\"^"') do (
  set "browser=%%~B"
  set "browser=!browser:\\=\!"
  echo !browser!

)
setLocal enableDelayedExpansion
for /f "tokens=* delims=@=" %%B in ('type "%Temp%\BROW3.reg" ^| findstr /B "@" ^| findstr /E ".exe,0\"^"') do (
  set "browser=%%~B"
  set "browser=!browser:\\=\!"
  set "browser=!browser:,0=!"
  echo !browser!

)
endLocal


rem delete temp file
del /Q /F "%Temp%\BROW3.reg"


echo.
echo.
echo DEFAULT BROWSER
echo.
echo.

START /W REGEDIT /E "%Temp%\BROW5.reg" HKEY_CLASSES_ROOT\http\shell\open\command
setLocal enableDelayedExpansion
for /f tokens^=3^ delims^=^" %%B in ('type "%Temp%\BROW5.reg" ^| find "@"') do (
    set "default=%%B"
    rem removing double slashes
    set "default=!default:\\=\!"
    rem removing end slash
    set "default=!default:~0,-1!"
    rem get the name
    for %%D in ("!default!") do echo %%~nD
)
endLocal
del /Q /F "%Temp%\BROW5.reg"

echo.
echo.
echo DEFAULT .HTML VIEWER
echo.
echo.

START /W REGEDIT /E "%Temp%\BROW6.reg" HKEY_CLASSES_ROOT\htmlfile\shell\open\command
setLocal enableDelayedExpansion
for /f tokens^=3^ delims^=^" %%B in ('type "%Temp%\BROW6.reg" ^| find "@"') do (
    set "default=%%B"
    set "default=!default:\\=\!"
    set "default=!default:~0,-1!"
    for %%D in ("!default!") do echo %%~nD
)
endLocal
del /Q /F "%Temp%\BROW6.reg"
echo.
echo.
pause

【讨论】:

  • thanx 伙计们,但我还需要在 xp windows 7 和 8 中运行 bat 文件。有没有办法用最少的代码和没有硬编码来统一
  • 我也可以在代码中使用 cmets,我对编码不太感兴趣,我很难确定每个步骤的含义,所以谢谢你的帮助
  • 是否可以检查错误级别并运行浏览器,我使用 3 或 4 个浏览器。让我们说“启动 BROWSER1.exe”,如果它已安装,它将运行,否则检查错误级别“启动 BROWSER 2.exe”
  • 这是在 windows Vista、XP 和部分 Win 8 上测试的。应该到处运行,但最好检查并告诉我是否有问题。我稍后会添加浏览器 exe 的路径。
  • 我们如何在其中定义相对路径。?它可以在没有任何 mod 的 64 位和 32 位机器上工作吗?我发现 64 位机器上有问题,它对我有用。不要约 32 位
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多