Batch: retornando um valor de um SETLOCAL EnableDelayedExpansion

Eu me pergunto por que esse código não funciona conforme o esperado:

@ECHO off
SET S1=HELLO

SETLOCAL EnableDelayedExpansion
SET S2=!S1! WORLD^^!
ECHO !S2!
ENDLOCAL & SET S1=!S2!

ECHO %S1%
PAUSE

Resultado

HELLO WORLD!
!S2!

Saída esperada:

HELLO WORLD!
HELLO WORLD!

Obrigado