Something like this might work. I guess you run the query on the source database, and then startup nomount on the target database and apply the output. You can also recreate the control file by 'alter database backup control file to trace;' and then edit that file so that you can create new control files on the target system.

Code:
select 'ALTER DATABASE RENAME FILE ' || name 
       || ' TO ' || 
       REPLACE(name, 'E:\', 'D:\') ||';' 
  from ( select name 
           from v$datafile
          union all
         select member name 
           from v$logfile
          union all
         select name 
           from v$tempfile )
 order by name;