Sí. Es que el "goto :eof" te saca del bat. Hay que cambiarlo en los dos primeros y crear las "etiquetas" de destino correspondientes.
Prueba así:
@echo off
set ruta=C:\Users\Desktop\archivo
cd "%ruta%"
for /f "tokens=*" %%a in ('dir /b /o-d *.txt') do (copy "%%a" C:\Users\Desktop\archivo_de_control &goto :uno)
:uno
for /f "tokens=*" %%b in ('dir /b /o-d *.bat') do (copy "%%b" C:\Users\Desktop\archivo_de_control &goto :dos)
:dos
for /f "tokens=*" %%c in ('dir /b /o-d *.csv') do (copy "%%c" C:\Users\Desktop\archivo_de_control &goto :eof)
Y te sugiero que utilices la herramienta SNIPPET de la página (el icono <> de la barra de herramientas) para insertar el texto de los bat. Es la que uso yo para que salgan en una ventanita como la de arriba.
Y también me gustaría saber si has probado lo que te dije del Powershell (en la primera de las consultas). Si lo has hecho me gustaría saber si has notado mejora en cuanto al tiempo de respuesta. Y no estaría mal aportar esa información (si la hay) en el propio hilo por si le sirve a alguien más.