- Você não cita pathes,
- a falha geométrica para produzir terminações de linha duplicadas e
- o fato de os nomes de usuário serem preenchidos com espaços são os problemas que você encontro.
- Seu uso errado do comando set como já mencionado por JohnnyVegas
Veja esta saída hexadecimal de exemplo do comando wmic para provar isso:
> wmic UserAccount get Name|hex.exe
HEX: +00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 0123456789abcdef
0000000000: 4E 61 6D 65 20 20 20 20 20 20 20 20 20 20 20 20 Name
0000000010: 20 20 20 20 0D 0D 0A 41 64 6D 69 6E 69 73 74 72 ...Administr
0000000020: 61 74 6F 72 20 20 20 20 20 20 20 0D 0D 0A 44 65 ator ...De
0000000030: 66 61 75 6C 74 41 63 63 6F 75 6E 74 20 20 20 20 faultAccount
0000000040: 20 20 0D 0D 0A 47 61 73 74 20 20 20 20 20 20 20 ...Gast
0000000050: 20 20 20 20 20 20 20 20 20 0D 0D 0A 48 6F 6D 65 ...Home
0000000060: 47 72 6F 75 70 55 73 65 72 24 20 20 20 20 20 20 GroupUser$
Para resolver o 0x0D
duplicado, você precisa de outro para.
O lote a seguir apenas ecoa o comando xcopy, se a saída for OK, remova o eco.
@echo OFF
SETLOCAL enabledelayedexpansion
SET "frompath=C:\from\"
SET "preusername=C:\to\"
SET "postusername=\folder\"
for /f "skip=1" %%a in ('wmic UserAccount get Name^|findstr "^[a-z]"') do (
for %%b in (%%~a) do Echo=xcopy "%frompath%" "%preusername%%%a%postusername%"
)
echo "Complete"
pause