Почему отложенное расширение завершается неудачно, когда внутри конвейерного блока кода?

Вот простой пакетный файл, который демонстрирует, как отложенное расширение завершается неудачно, если оно находится в блоке, который передается по конвейеру. (Ошибка в конце сценария) Кто-нибудь может объяснить, почему это так?

У меня есть обходной путь, но он требует создания временного файла. Я изначально столкнулся с этой проблемой во время работы надПоиск файлов и сортировка по размеру в пакетном файле Windows

@echo off
setlocal enableDelayedExpansion

set test1=x
set test2=y
set test3=z

echo(

echo NORMAL EXPANSION TEST
echo Unsorted works
(
  echo %test3%
  echo %test1%
  echo %test2%
)
echo(
echo Sorted works
(
  echo %test3%
  echo %test1%
  echo %test2%
) | sort

echo(
echo ---------
echo(

echo DELAYED EXPANSION TEST
echo Unsorted works
(
  echo !test3!
  echo !test1!
  echo !test2!
)
echo(
echo Sorted fails
(
  echo !test3!
  echo !test1!
  echo !test2!
) | sort
echo(
echo Sort workaround
(
  echo !test3!
  echo !test1!
  echo !test2!
)>temp.txt
sort temp.txt
del temp.txt

Вот результаты

NORMAL EXPANSION TEST
Unsorted works
z
x
y

Sorted works
x
y
z

---------

DELAYED EXPANSION TEST
Unsorted works
z
x
y

Sorted fails
!test1!
!test2!
!test3!

Sort workaround
x
y
z

Ответы на вопрос(3)

Ваш ответ на вопрос