Вот простой командный файл, который демонстрирует, как с задержкой расширения происходит сбой, если он находится в блоке, который передается по трубопроводу. (Ошибка заканчивается в конце script). Может ли кто-нибудь объяснить, почему это?
У меня есть работа, но для этого требуется создание временного файла. Сначала я столкнулся с этой проблемой при работе над Поиск файлов и сортировка по размеру в пакетном файле 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