Skip to main content

How to Find the Default Web Browser in Batch Script

A common task for a user-friendly script is to open a web page, for example, to display a help guide, a log file, or a final report. While you can use the START command with a URL (START https://example.com), this can sometimes fail or behave unexpectedly if file associations are misconfigured. A more robust method is to find the user's actual default web browser and then use it to launch the URL.

This guide will teach you how to find the default browser by querying the Windows Registry. This is a complex task in pure batch, so we will cover the multi-step REG QUERY method and then demonstrate the far simpler and more reliable PowerShell one-liner, which is the recommended approach for this task.

The Challenge: Where is the Default Browser Stored?

There is no single command or environment variable that simply tells you the default browser. This information is a user-specific setting stored in the Windows Registry. Finding the browser's executable path is a two-step process:

  1. First, we find the "ProgId" associated with the http URL protocol for the current user. A ProgId is an internal name like ChromeHTML or MSEdgeHTM.
  2. Second, we look up that ProgId in another part of the registry to find the command-line string that is used to open it, which contains the path to the executable.

The Core Method: The Two-Step Registry Query

This method uses the built-in REG QUERY command.

Step 1: Find the ProgId for the HTTP Protocol

The ProgId is stored in the user's profile. Registry Key: HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice Value Name: ProgId

REG QUERY "HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" /v ProgId

Output:

HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice
ProgId REG_SZ ChromeHTML

From this, we now know the ProgId is ChromeHTML.

Step 2: Find the Open Command for the ProgId

The command to open a ProgId is stored in HKEY_CLASSES_ROOT. Registry Key: HKEY_CLASSES_ROOT\<ProgId>\shell\open\command

REG QUERY "HKEY_CLASSES_ROOT\ChromeHTML\shell\open\command" /ve

Output:

HKEY_CLASSES_ROOT\ChromeHTML\shell\open\command
(Default) REG_SZ "C:\Program Files\Google\Chrome\Application\chrome.exe" --single-argument %1
note
  • This output finally gives us the path to the executable.
  • /ve queries the (Default) value of the key.

The two-step batch process is complex and requires careful string parsing. A PowerShell one-liner can perform both steps in a single, more robust command.

Script: PowerShell One-Liner

@ECHO OFF
SET "BrowserPath="

FOR /F "delims=" %%B IN (
'powershell -Command "$progId = (Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice').ProgId; $cmd = (Get-ItemProperty -Path ('HKCR:\' + $progId + '\shell\open\command')).'(Default)'; $exePath = $cmd.Split('\"')[1]; Write-Output $exePath"'
) DO (
SET "BrowserPath=%%B"
)

ECHO The default browser is located at:
ECHO "%BrowserPath%"

This command is complex, but it is a single, self-contained unit that performs all the lookups and parsing internally, making it far more reliable than the pure batch method.

The Full Batch Script: Putting the Registry Queries Together

This script demonstrates the full, pure-batch logic. It requires two separate FOR /F loops to parse the output of the two REG QUERY commands.

@ECHO OFF
SETLOCAL

SET "ProgId="
SET "BrowserCommand="
SET "BrowserPath="

ECHO --- Finding Default Browser (Batch Method) ---
ECHO.

REM --- Step 1: Get the ProgId ---
FOR /F "tokens=3" %%P IN ('REG QUERY "HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" /v ProgId') DO (
SET "ProgId=%%P"
)

IF NOT DEFINED ProgId (
ECHO [ERROR] Could not determine the ProgId for the default browser.
GOTO :End
)
ECHO Found ProgId: %ProgId%

REM --- Step 2: Get the command string from the ProgId ---
FOR /F "tokens=2,*" %%C IN ('REG QUERY "HKEY_CLASSES_ROOT\%ProgId%\shell\open\command" /ve') DO (
SET "BrowserCommand=%%D"
)

IF NOT DEFINED BrowserCommand (
ECHO [ERROR] Could not find the open command for %ProgId%.
GOTO :End
)
ECHO Found command string: %BrowserCommand%

REM --- Step 3: Extract just the executable path from the command string ---
FOR /F "tokens=1 delims=" %%P IN ("%BrowserCommand%") DO (
SET "BrowserPath=%%~P"
)

ECHO.
ECHO --- Result ---
ECHO The default browser executable is: %BrowserPath%

:End
ENDLOCAL

Common Pitfalls and How to Solve Them

  • User-Specific Setting: This method finds the default browser for the currently logged-in user. It is not a system-wide setting. If you run the script as an Administrator, it will find the Administrator's default browser, which might be different from the regular user's.
  • Permissions: Reading from HKEY_CURRENT_USER (HKCU) does not typically require administrator rights. However, reading from HKEY_CLASSES_ROOT (HKCR) can sometimes involve protected keys, so running as an administrator is still recommended for maximum reliability.
  • Complex Command Strings: The open command can sometimes contain extra arguments or quotes. The FOR /F parsing in the pure-batch script is a best-effort attempt and can fail on unusual command strings. The PowerShell method is generally more robust at parsing these.

Practical Example: A "Help" Script That Opens a URL

This script uses the recommended PowerShell method to find the user's browser and then opens a specific help URL in it.

@ECHO OFF
SETLOCAL
SET "HelpURL=https://tutorialreference.com/"
SET "BrowserPath="

ECHO --- Help Launcher ---
ECHO Finding your default web browser...

FOR /F "delims=" %%B IN (
'powershell -NoProfile -Command "$progId = (Get-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice').ProgId; $cmd = (Get-ItemProperty -Path ('HKCR:\' + $progId + '\shell\open\command')).'(Default)'; $exePath = $cmd.Split('\"')[1]; Write-Output $exePath"'
) DO (
SET "BrowserPath=%%B"
)

IF NOT DEFINED BrowserPath (
ECHO [ERROR] Could not find default browser. Trying with START...
START "" "%HelpURL%"
) ELSE (
ECHO Browser found: "%BrowserPath%"
ECHO Opening help page...
START "Help" "%BrowserPath%" "%HelpURL%"
)

ENDLOCAL

Conclusion

Finding the default web browser is an advanced task for a batch script that requires diving into the Windows Registry.

  • The pure-batch method is possible but complex, requiring a two-step REG QUERY process and careful parsing with FOR /F loops.
  • The PowerShell one-liner method is the overwhelmingly superior and recommended approach. It is more concise, more robust, and handles the complex parsing internally.

For any script that needs to reliably open a web page in the user's preferred browser, the hybrid approach of calling PowerShell from your batch file is the most professional and effective solution.