42

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 '12 at 13:48
  • 1
    Not at all, just trying to get the interest of the Windows command line junkies. :) – deed02392 Mar 31 '12 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 '12 at 14:24
  • That's not an option since the original Windows install isn't available anymore. – deed02392 Mar 31 '12 at 14:40
  • See also stackoverflow.com/q/212906/10245 – Tim Abell Apr 5 '18 at 19:08
60

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

Use Assoc to get the filetype

>Assoc .txt

gives you:

.txt = txtfile

Then

>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.

  • 1
    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 '12 at 18:35
  • 18
    +1 for two command line tools that i didn't know existed. – Ian Boyd Mar 31 '12 at 19:41
  • 1
    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 '12 at 9:34
  • 1
    @deed02392 you can add a new association with assoc 'Assoc .php=phpfile' should work – uSlackr Apr 1 '12 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 '12 at 19:56
4

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

$exts=@("txt","log","csproj","sql","xml","flobble")
echo "## setting up file associations"
foreach ($ext in $exts){
    $extfile=$ext+"file"
    $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.

https://gist.github.com/timabell/bc90e0808ec1cda173ca09225a16e194

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

2

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

[HKEY_CLASSES_ROOT\notepad_pp]
@=""

[HKEY_CLASSES_ROOT\notepad_pp\shell]

[HKEY_CLASSES_ROOT\notepad_pp\shell\open]

[HKEY_CLASSES_ROOT\notepad_pp\shell\open\command]
@="\"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):

[HKEY_CLASSES_ROOT\.pl]
@="notepad_pp"

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 '12 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 '12 at 22:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.