Skip to main content

How to Check if Windows Safe Mode is Active in Batch Script

Windows Safe Mode is a diagnostic startup mode that loads a minimal set of drivers and services to help troubleshoot system failures. In many Batch scripting scenarios, especially those involving automated software installation or system maintenance, it is crucial to know if the script is running in Safe Mode. Certain services (like the Windows Installer) do not run in Safe Mode, and many drivers are unavailable. By detecting the boot mode within your script, you can prevent errors or execute specific troubleshooting logic.

This guide explains how to identify Safe Mode using the %SAFEBOOT_OPTION% environment variable and registry queries.

Why Detect Safe Mode?

  • Prevent Failures: Stopping a script from attempting to start a service that is disabled in Safe Mode.
  • Dynamic Logic: Running a "rebuild" or "repair" task only when the user has intentionally booted into Safe Mode.
  • Reporting: Including the boot state in a diagnostic log to help identify why certain hardware components are missing.
No Admin Rights Needed

Detecting the current boot mode is a standard system query. You can run these checks as a standard user without needing administrative elevation.

Method 1: Using the SAFEBOOT_OPTION Variable (Fastest)

When Windows boots into Safe Mode, it automatically sets a system-wide environment variable called %SAFEBOOT_OPTION%. This is the most direct and Batch-friendly way to check the status.

Basic Extraction

@echo off
if defined SAFEBOOT_OPTION (
echo [STATUS] Running in SAFE MODE: %SAFEBOOT_OPTION%
) else (
echo [STATUS] Running in NORMAL MODE
)
pause

Understanding the Values:

  • Minimal: Safe Mode without Networking.
  • Network: Safe Mode with Networking.
  • (Undefined): Normal Mode.

Method 2: Querying the Registry (Most Reliable)

If you are worried that an environment variable might have been cleared or modified, you can query the Windows Registry directly for the boot configuration.

@echo off
echo [PROCESS] Investigating boot options...

reg query "HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Option" >nul 2>&1

if %errorlevel% equ 0 (
echo [STATUS] Safe Mode is ACTIVE.
) else (
echo [STATUS] Normal Boot detected.
)
pause

Creating a Conditional Maintenance Script

A professional script should use this detection to decide whether to continue with a normal operation or switch to a recovery routine.

@echo off
setlocal

echo ============================================================
echo System Maintenance Tool
echo ============================================================

:: 1. Detect Boot Mode
if defined SAFEBOOT_OPTION (
echo [WARNING] Safe Mode Detected: %SAFEBOOT_OPTION%
goto :SafeModeRoutine
)

:: Normal Logic
echo [PROCESS] Starting Standard Maintenance...
:: ... Run normal commands (like starting services)
goto :End

:SafeModeRoutine
echo [INFO] Entering Diagnostic Mode...
echo [PROCESS] Running Offline Repair Tasks...
:: ... Run repair commands (like sfc or offline registry edits)
goto :End

:End
echo ============================================================
pause

Common Pitfalls and How to Avoid Them

Dependency Errors

In Safe Mode, the winmgmt (WMI) service is often disabled or restricted.

Wrong Way:

:: Trying to use WMIC in Safe Mode
wmic os get Caption
:: This may return "Initialization Failure" or hang.

Correct Way: Always use the environment variable or REG QUERY method, as they do not depend on the WMI service being active.

Safe Mode with Command Prompt

If a user boots into "Safe Mode with Command Prompt," the explorer shell is missing. Your script should avoid using any commands that rely on the taskbar or desktop icons.

SEO and UX Tip

If your script requires Networking, check if %SAFEBOOT_OPTION% is set to "Network." If it is set to "Minimal," advise the user to reboot and select "Safe Mode with Networking" if they need to download repair files.

Best Practices for Safe Mode Scripts

  1. Skip Service Starts: Do not use net start for non-essential services in your script if Safe Mode is detected, as it will likely throw a "Service cannot be started in Safe Mode" error.
  2. Verbose Logging: Since many visual tools are missing in Safe Mode, ensure your script outputs as much text as possible to the console so you can follow the repair progress.
  3. Exit Strategy: Provide a clear command at the end of your script to return to normal mode:
    :: Force a reboot back to normal mode
    bcdedit /deletevalue {current} safeboot
    shutdown /r /t 0
BCD Settings

Note that detecting Safe Mode is different from forcing Safe Mode. To force a reboot into Safe Mode via script, you would use the bcdedit command.

Conclusion

Detecting whether Windows is in Safe Mode via a Batch script is a critical step for creating robust, intelligent troubleshooting tools. By utilizing the %SAFEBOOT_OPTION% variable or registry queries, you can ensure that your maintenance tasks adapt to the system's current state, preventing unnecessary errors and enabling specialized recovery workflows. This professional approach to scripting allows you to handle system failures with grace, providing a reliable and adaptive experience whether the OS is running at full capacity or in a minimal diagnostic state.