Put this in a legal context and giving a reason for rejection is just asking for trouble. First of all, the rejected candidate could argue that your reason was illegal. Second, they could argue you were misinformed, so the reason is not legitimate. Finally, they could argue they've changed, so you have to reconsider them, since your stated reason no longer applies.
In all these cases, it's easiest to provide no reason whatsoever. (See also Miss Manners, who frequently has advised repeating a meaningless, "No, because I can't; I can't because I won't be able to" type response until the other person gives up.) Giving a reason creates a focus for an argument. No reason, no argument, just the other person incessantly begging for a reason, which is never going to make them look good.
Elaborating further: Cost - Providing feedback to each applicant is a costly process, that would normally entail multiple systems (people, resources) to provide feedback that is going to be specifically helpful to the individual.
Time - Crafting feedback takes time. An automated process would generally be regarded as more backward, especially from the person receiving the feedback.
Hiring Process - Given the two reasons above, organizations tend to exclude this practice (particularly for large organizations who may need to process hundreds or thousands of applicants for a certain posting).
Most people are incapable of accepting criticism anyway, and nowadays where everyone blogs, tweets or posts on facebook, there is a risk that the interviewing company may have its hiring process tarnished just for giving constructive feedback in good faith. "No good deed goes unpunished".
It's not their job to provide detailed feedback to 100+ lesser candidates.
If you want feedback, it's best to apply through a recruiter. Then you can ask the recruiter why you were not selected.