Ganz so wie meine beiden Vorredner würde ich das nicht ausschließen!
Mit call und label bekommt man schon etwas ähnliches wie Funktionen:
@SET XXX="aaa bbb ccc"
@CALL :parse %XXX%
@GOTO :end
:parse
@setlocal
@SET list=%1
@SET list=%list:"=%
@FOR /f "tokens=1* delims= " %%i IN ("%list%") DO @(
@IF NOT "%%i" == "" @CALL :sub %%i
@IF NOT "%%j" == "" @CALL :parse "%%j"
)
@endlocal
@exit /b
:sub
@setlocal
@echo %1
@endlocal
@exit /b
:end