I have a few scripts which perform actions on files. Rather than have the script ask me what file to use, it is easier to associate the file type with the script so that I can just double click on the file (or right click and choose “Open with”) in Windows Explorer.
For this to work the script must first accept a file on the command line. Here’s a really simple script which reads the content of a file passed into the script with the “thefile” command line parameter:
ReadFile>%thefile%,fdata MessageModal>fdata
If you were to compile this script and then pass thefile on the command line it would read in the file content and display it in a message box:
c:\path\myexe.exe /thefile=c:\somefile.mjt
Now, if we create a file association for .mjt files we would only need to double click on the .mjt file to have it open in the exe.
The easiest way to create a file association for a file that does not already have one is to just double click on the file in Windows Explorer. Then when asked choose to select from a list of installed programs and on the next dialog click on the “Browse” button to locate your executable.
If the file extension is already associated with other applications then right click on the file and choose “Open With” and then “Choose program…”, then UNCHECK “Always use the selected program to open this kind of file” and click on “Browse” to locate your executable.
Initially this won’t quite work. We need to make a small change, as this creates a mapping in the registry which looks like this:
“c:\path\myexe.exe” “%1”
We want to change it to:
“c:\path\myexe.exe” /thefile=”%1″
So after creating the file association via Windows Explorer we need to make a small registry change:
1. Fire up RegEdit.exe (Start/Run and then type regedit.exe)
2. Open HKEY_CLASSES_ROOT
3. Search for your exe name to find the “c:\path\myexe.exe” “%1” entry
4. Make the change as above, changing the “%1″ to /thefile=”%1”
Now, when you double click the file (or right click/Open with) it will launch your exe, with the filename passed to it in the “thefile” parameter.
You could actually code the script in such a way that you don’t need to do the registry change. You could parse the COMMAND_LINE system variable to get the file from the command line, without requiring a custom parameter name. This is discussed in this forum post which talks about being able to drag and drop a file onto a script.
If you want to create the file association programmatically, take a look at what registry entries are created by Windows when you do it manually. Then you can use the registry functions to achieve the same. E.g. this script associates .why files with the “c:\where\why.exe” executable expecting the file in a parameter called “thefile”:
RegistryWriteKey>HKEY_CLASSES_ROOT,.why,,why_auto_file RegistryWriteKey>HKEY_CLASSES_ROOT,why_auto_file\shell\open\command,,"c:\where\why.exe" /thefile="%1"