Eu dei uma olhada agora quando cheguei em casa e isso está funcionando para mim
setlocal EnableDelayedExpansion
IF [%1]==[] (set txtpath=%CD%\list.txt) else (set txtpath=%1)
set projectfolder="D:\"
set savelocation="D:\_Backup"
cd /d %projectfolder%
set lenght=%CD%
set i=-1
set n=0
:nextChar
set /A i+=1
set c=!lenght:~%i%,1!
set /A n+=1
if "!c!" == "" goto endLine
goto nextChar
:endLine
for /f "tokens=*" %%A in (!txtpath!) do call :filecheck "%%A"
goto :eof
:filecheck
set folder=%~pd1%
set location="!folder:~%n%!"
if not exist %savelocation%\%location% mkdir %savelocation%\%location%
copy %1 %savelocation%\%location% && del /q %1
goto :eof
endlocal
Refiz o script para refletir que você queria um arquivo * .txt como entrada para os caminhos de arquivos, isso funciona para mim, você precisa definir "projectfolder", "savelocation", "txtpath" mas depois disso o script pode ser executado de qualquer lugar, e faz o que você quer. (você pode arrastar e soltar um arquivo txt nele depois de configurar a pasta do projeto / savelocation)
Ele recria a estrutura de pastas para todos os arquivos no arquivo .txt, em qualquer local da unidade (ou outra unidade para esse fim), copia os arquivos e os exclui da pasta original.