Ваш вопрос немного неясен, в частности, неочевидно, нужно ли перечислять локальные и / или удаленные экземпляры? Для локальных экземпляров поиск в реестре более надежен, чем сканирование файловой системы, для удаленных экземпляров sqlcmd.exe может перечислить экземпляры в сети. Эта страница дает хороший обзор вариантов (для 2005 года, но они все еще действительны для 2008 года).
Если вы можете вызвать .NET из Java , вы можете использовать объект Smo Server, чтобы получить много информации об экземплярах, включая пути установки. На этом сайте много вопросов о перечислении экземпляров и сборе информации о них.
Наконец, обратите внимание, что osql.exe устарел , поэтому вместо него следует использовать sqlcmd.exe.