Ответ 1
Причина связана с тем, как Windows реализует трубы. Каждая сторона канала выполняется в собственной оболочке CMD. Ваша команда echo ^& | more
на самом деле пытается выполнить
C:\Windows\system32\cmd.exe /S /D /c" echo & "
слева и
C:\Windows\system32\cmd.exe /S /D /c" more "
справа. Вы можете понять, почему левая сторона терпит неудачу, пытаясь повторить неэкранированный &
. Побег был поглощен начальной фазой разбора до того, как будет выполнена действительная левая сторона.
Также легко понять, почему ваше решение работает. Левая сторона echo ^^^& | more
становится
C:\Windows\system32\cmd.exe /S /D /c" echo ^& "
При работе с окнами Windows существует множество тонких осложнений. Обратитесь к Почему задержка с расширением заканчивается, если внутри блока кода с кодом? для получения дополнительной информации. У выбранного ответа есть лучшая информация, но я рекомендую прочитать вопрос и все ответы, чтобы получить контекст выбранного ответа.