Comportamento estranho com caracteres especiais em argumentos de funções em lote?

Suponha que você executetest.bat "blabla,blabla,^>blabla", "blaby"

implementação test.bat:

@SETLOCAL
@ECHO OFF
SET list=%~1
ECHO "LIST: %list%"
ECHO "ARG 1: %~1"
ECHO "ARG 2: %~2"
@ENDLOCAL   
@GOTO :EOF

A saída é conforme esperado:

"LIST: blabla,blabla,>blabla"
"ARG 1: blabla,blabla,^>blabla"
"ARG 2: blaby"

Mas e se você fizer test.bat uma função dentro de um arquivo de lote:

@SETLOCAL
CALL :TEST "blabla,blabla,^>blabla", "blaby"
@ENDLOCAL
@GOTO :EOF

:TEST
@SETLOCAL
@ECHO OFF
SET list=%~1
ECHO "LIST: %list%"
ECHO "ARG 1: %~1"
ECHO "ARG 2: %~2"
@ENDLOCAL   
@GOTO :EOF

Depois de executá-lo, a saída é:

"LIST: blabla,blabla,^"
"ARG 1: blabla,blabla,^^>blabla"
"ARG 2: blaby"

Hã?

Onde fezblabla ir na lista?ARG 1 tem^^? Por quê?

Alguém pode explicar como os caracteres especiais se comportam de maneira diferente nos argumentos da função, em oposição aos argumentos da linha de comando?

questionAnswers(2)

yourAnswerToTheQuestion