Se você quer uma solução Powershell, pode tentar algo assim:
# Load folder structure into memory
$folder = "C:\"
$files = gci $folder -r
# Loop through each file in the folder structure
foreach ($file in $files)
{
# Declare new folder structure by name
$newpath = ($file.path -replace "^.","D") # Replace C with D
# Create the folder if it doesn't exist
if (!(test-path $newpath)) {mkdir $newpath -f}
# Copy the file to the new path
cp $file $newpath$file.name -force
}
Deve ser uma operação bastante eficiente, pois contém apenas alguns comandos simples.