Just some pointers to what's needed, I doubt you'll pursue this when you find out what it takes.
Starting point is writing code that enumerates all of the EXE and DLL files on your disk drives. For each file you find, you first have to check if it is indeed a managed program. Next, you need to lift the metadata version number from the COR header. It indicates what CLR version the executable was built against. Common values are 2.0.50727 for .NET 2.0, 3.0 and 3.5, 4.0.30319 for .NET 4.0, I don't know the numbers for .NET 1.x
Next you need to use Assembly.GetReferencedAssemblies() to find out what .NET assemblies it has a dependency on. You'll need to build your own index of assemblies that are present in 2.0, 3.0, 3.5 and its service packs. This lets you find out what specific version is needed.
Next you need to parse any .config file that might be present for an EXE and check for <requiredRuntime>
and <supportedRuntime>
elements. The latter attribute is the tricky one since it can appear more than once.
There are probably some things I overlooked, like publisher assemblies and bindingRedirects. Use the source code for ildasm.exe in SSCLI20 to get a crack at reading the metadata version number. The win for such a tool is small. With one terabyte drives selling for a hundred bucks today, the potential savings of such a tool are worth about 4 cents.