I've just recently reinstalled Windows and in setting up my environment I've noticed that all my associations for the various programming languages I edit in Notepad++ have gone (naturally).

I am thinking for the future, wouldn't it be grand to have some kind of batch file that could automatically associate a selection of file extensions with N++ at the click of a button, rather than having to wait until I encounter all these extensions then go through the rigmarole of navigating to the N++ exe etc.

I can't do this with the Default Programs utility that comes with Windows 7, because it only works with extensions that have been 'encountered'.

So is it possible to programatically associate file extensions with application on Windows?

  • Does the solution have to be powershell as per your tag?
    – Richard
    Mar 31, 2012 at 13:48
  • 1
    Not at all, just trying to get the interest of the Windows command line junkies. :)
    – deed02392
    Mar 31, 2012 at 13:53
  • Use Windows Easy Transfer to transfer your system settings, its built into Windows 7-Vista and can be downloaded for XP...microsoft.com/download/en/details.aspx?id=7349
    – Moab
    Mar 31, 2012 at 14:24
  • That's not an option since the original Windows install isn't available anymore.
    – deed02392
    Mar 31, 2012 at 14:40
  • See also stackoverflow.com/q/212906/10245
    – Tim Abell
    Apr 5, 2018 at 19:08

3 Answers 3


Use Ftype & Assoc to fix this (and it is scriptable).

Use Assoc to get the filetype

>Assoc .txt

gives you:

.txt = txtfile


>Ftype txtfile=C:\Program Files (x86)\Notepad++\notepad++.exe %1

Once you know the file type you can use Ftype to associate it with an action.

This would work for .php files (just plop them in a batch file)

Assoc .php=phpfile
Ftype phpfile="C:\Program Files (x86)\Notepad++\notepad++.exe" %1

And you can copy these lines to add other text-based files as you would like.

  • 2
    Interesting, when I do >assoc .php it says it has no file association? It seems what is set up when you specify a default program to open a file type is not 'registered' in this way. Why might that be?
    – deed02392
    Mar 31, 2012 at 18:35
  • 23
    +1 for two command line tools that i didn't know existed.
    – Ian Boyd
    Mar 31, 2012 at 19:41
  • 2
    This solution makes text files open up in notepad++ and not the previously assigned program (notepad). It won't make notepad++ open when you click on a new, unregistered, file extension (eg. pl, py or c) like the submitter asked.
    – Richard
    Apr 1, 2012 at 9:34
  • 2
    @deed02392 you can add a new association with assoc 'Assoc .php=phpfile' should work
    – uSlackr
    Apr 1, 2012 at 19:53
  • 2
    The intent of my answer was to show you how to use assoc & ftype, not to write the batch file for you. But I'll play along
    – uSlackr
    Apr 3, 2012 at 19:56

Here's a script that worked for me on Windows 10

echo "## setting up file associations"
foreach ($ext in $exts){
    $dotext="." + $ext
    cmd /c assoc $dotext=$extfile
    cmd /c "ftype $extfile=""C:\Program Files (x86)\Notepad++\notepad++.exe"" ""%1"""
    echo ""
  • Needs to be run in an administrator (elevated) PowerShell window.
  • Explorer immediately refreshed and showed new file icons.


Thanks to the other answers for the information I needed to make this work.

  • I read somewhere that it couldn't be done - bravo!
    – KERR
    May 12, 2021 at 11:08

At the minimum, you need to create one registry key which gives notepad++ an ID and path and then one for each extension you wish to register to use it.

To create the ID and path (check the path points to the correct location):

Windows Registry Editor Version 5.00




@="\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" \"%1\""

and then keep repeating the next bit, one for each extension (in this example, .pl is for Perl):


Save this file with the extension .reg and you should now be able to re-associate all the extensions just by double-clicking on this file and confirming you want to import the entries into the registry.

  • 1
    Interesting, I've been looking and it seems what Windows 7 does when you set a program to load from is create an entry in HKCR\ext_auto_file\shell\open\command with a value of "C:\Program Files\Notepad++\notepad++.exe" "%1". Where were you basing yours from?
    – deed02392
    Mar 31, 2012 at 18:26
  • It's basically the same, just with ext_auto_file renamed to something slightly more meaningful and multiple file extensions pointing to one single entry.
    – Richard
    Mar 31, 2012 at 22:14
  • Hey, could you elaborate the above as a full valid reg file?
    – eri0o
    Jan 26, 2022 at 10:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .