For my own memory: a small script to list SQL Server databases and their data/log files.
"%ProgramFiles%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -S .\SQLEXPRESS -E -Q "select name from sys.databases" "%ProgramFiles%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -S .\SQLEXPRESS -E -Q "select name,filename from model.sys.sysfiles" "%ProgramFiles%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -S .\SQLEXPRESS -E -Q "select name,filename from master.sys.sysfiles" "%ProgramFiles%\Microsoft SQL Server\90\Tools\Binn\OSQL.EXE" -S .\SQLEXPRESS -E -Q "exec sp_msforeachdb 'select ''?'',name,filename from ?.dbo.sysfiles'"
SQL Server maintains a list of databases in the system table sys.databases.
It also has an unsupported procedure sp_msforeachdb that you can use to investigate for instance performance issues.
In the above example, sp_msforeachdb just builds a statement (filling the ? with the database name) to execute.
–jeroen