Skip to main content

How to Change File Associations in Batch Script

A file association is the link that tells Windows which program to use when you double-click a file with a specific extension (e.g., opening .txt files with Notepad). System administrators and power users often need to script these associations to enforce a standard application for a certain file type or to repair a broken association.

This guide will teach you how to use the two primary built-in commands for managing file associations: assoc and ftype. You will learn how this two-step system works, how to view existing associations, and how to create or change them to control which programs open your files.

The Two-Step Process: assoc and ftype

Changing a file association is not a single command. It's a two-part process that involves an intermediary "FileType" name.

  1. assoc (Associate): This command creates a link between a file extension (e.g., .log) and a FileType name (e.g., LogFile). This is the first half of the connection.
    • File Extension -> FileType Name
  2. ftype (File Type): This command creates a link between the FileType name (e.g., LogFile) and the executable program that will open it. This is the second half of the connection.
    • FileType Name -> Path to Executable

By chaining these two, you create the full association: .log -> LogFile -> C:\Program Files\Notepad++\notepad++.exe "%1"

The Core Commands Explained

assoc Command

  • To view all associations: assoc
  • To view a specific association: assoc .txt (Output: .txt=txtfile)
  • To create/change an association: assoc .ext=FileTypeName

ftype Command

  • To view all file types: ftype
  • To view a specific file type: ftype txtfile (Output: txtfile=%SystemRoot%\system32\NOTEPAD.EXE "%1")
  • To create/change a file type: ftype FileTypeName="C:\Path\To\program.exe" "%1"
    • "%1" is a crucial placeholder. It represents the file that was double-clicked, and it is passed as a command-line argument to the program. You must include it.

Basic Example: Viewing Existing Associations

Before changing anything, it's a good idea to see what's already there.

@ECHO OFF
ECHO --- Viewing the association for .txt files ---
ECHO.

ECHO Step 1: Find the FileType name for the .txt extension.
assoc .txt

ECHO.
ECHO Step 2: Find the command associated with that FileType.
ftype txtfile

Output:

--- Viewing the association for .txt files ---

Step 1: Find the FileType name for the .txt extension.
.txt=txtfile

Step 2: Find the command associated with that FileType.
txtfile=%SystemRoot%\system32\NOTEPAD.EXE "%1"

This tells us that .txt is linked to the txtfile type, which in turn is linked to NOTEPAD.EXE.

How to Change a File Association

Let's change the association for .log files so they open with Notepad++ instead of the default Notepad.

danger

This operation requires administrator privileges.

@ECHO OFF
REM This script MUST be run as an Administrator.

ECHO --- Changing .log file association to Notepad++ ---
ECHO.

REM --- Step 1: Associate the .log extension with a new FileType name. ---
REM We'll create a custom FileType called "LogFile.NPP".
assoc .log=LogFile.NPP

REM --- Step 2: Associate the FileType name with the Notepad++ executable. ---
SET "NPP_PATH=C:\Program Files\Notepad++\notepad++.exe"
ftype LogFile.NPP="%NPP_PATH%" "%1"

ECHO.
ECHO [SUCCESS] The association for .log files has been changed.
ECHO Double-clicking a .log file should now open it in Notepad++.

Common Pitfalls and How to Solve Them

Problem: The Script is Not Run as Administrator

File associations are stored in the HKEY_CLASSES_ROOT section of the Windows Registry, which is a protected location.

Example of error message:

Access is denied.

Solution: The script must be run from an elevated command prompt. Right-click your .bat file or cmd.exe and select "Run as administrator."

Problem: Using Spaces and Quotes

  • The path to the executable often contains spaces (e.g., C:\Program Files\...).
  • The %1 placeholder should be quoted to handle filenames with spaces.

Solution: The ftype command has a specific and slightly unusual quoting rule. The entire command string, including the executable path and the %1, should be enclosed in one set of double quotes.

REM Correct, robust syntax for ftype:
ftype MyFileType="C:\Path With Spaces\program.exe" "%1"

Practical Example: A "Set Default Editor" Script

This script allows a user to easily switch the default program for .txt, .log, and .csv files between the built-in Notepad and a custom editor like VS Code.

@ECHO OFF
SETLOCAL
REM This script must be run as an Administrator.

SET "EDITOR_PATH=C:\Users\Admin\AppData\Local\Programs\Microsoft VS Code\Code.exe"
IF NOT EXIST "%EDITOR_PATH%" (ECHO VS Code not found! & GOTO :EOF)

:Menu
CLS
ECHO --- Set Default Text Editor ---
ECHO.
ECHO 1. Set VS Code as default editor
ECHO 2. Restore Notepad as default editor
ECHO.
CHOICE /C 12 /M "Enter your choice: "

IF %ERRORLEVEL% EQU 2 GOTO :SetNotepad
IF %ERRORLEVEL% EQU 1 GOTO :SetVSCode
GOTO :EOF

:SetVSCode
ECHO Setting associations to VS Code...
assoc .txt=vscode_txt
assoc .log=vscode_txt
assoc .csv=vscode_txt
ftype vscode_txt="%EDITOR_PATH%" "%1"
ECHO Done.
GOTO :EOF

:SetNotepad
ECHO Restoring associations to Notepad...
assoc .txt=txtfile
assoc .log=txtfile
assoc .csv=txtfile
ftype txtfile=%SystemRoot%\system32\NOTEPAD.EXE "%1"
ECHO Done.
GOTO :EOF

Conclusion

The assoc and ftype commands are the standard, built-in tools for scripting file associations in Windows. They provide a powerful, two-step method for controlling how files are opened.

Key takeaways for using them successfully:

  • Remember the two-step process: assoc links the extension to a FileType, and ftype links the FileType to a program.
  • You must run your script as an Administrator to change system-wide associations.
  • Always include the "%1" placeholder in your ftype command to ensure the filename is passed to the program.
  • Use the robust quoting style for ftype: ftype Name="C:\Path\program.exe" "%1".