Sua pergunta parece que você deseja os 10 primeiros arquivos da subpasta todos ? Isso deve ser feito (não exaustivamente testado!):
echo off
xcopy /Y %1 %2 /T /E
dir %1 /b /s /A:D >tempfolderlist.txt
for /f "tokens=1 delims=¬" %%a in (./tempfolderlist.txt) do (
dir "%%a" /b /A:-D >tempfilelist.txt
setlocal enabledelayedexpansion
set counter=0
for /f "tokens=1 delims=¬" %%b in (./tempfilelist.txt) do (
IF !counter! LSS 10 call :docopy %1 "%%a\%%b" %2
set /a counter+=1
)
endlocal
)
del /q tempfolderlist.txt
del /q tempfilelist.txt
GOTO:EOF
:docopy
set sourcePath=%~1
set sourceFile=%~2
set targetPath=%~3
set sourceNoDrive=%sourceFile:~3,5000%
set sourcePathNoDrive=%sourcePath:~3,5000%
set sourceNoDrive=!sourceNoDrive:%sourcePathNoDrive%\=!
copy "%sourceFile%" "%targetPath%\%sourceNoDrive%" >> out.txt
GOTO:EOF
Se ele for salvo em um arquivo de lote chamado 'first10.cmd', você poderá usá-lo assim:
first10.cmd "C:\Temp\SourcePath" "C:\Temp\DestPath"
Primeiro, ele prepara a estrutura da pasta de destintation usando xcopy, assim como na sua pergunta. Em seguida, salvamos uma lista de todas as pastas em um arquivo e fazemos um loop sobre cada uma delas. Para cada pasta, salvamos uma lista de todos os arquivos nessa pasta e fazemos um loop sobre cada arquivo. Para cada arquivo, :docopy
constrói o comando copy e o executa.