O pipe para cmd | cmd executará todos os comandos em seu fluxo de entrada.
- No primeiro caso, o fluxo de entrada conterá a saída de
fileX.cmd, ou seja,dir, e é isso que o| cmdexecutará. - no segundo caso, o fluxo de entrada conterá
@echo dir, portanto você deverá ver apenas o textodir.
Eu recebo More? se não houver uma nova linha no final do comando em fileX.cmd . A razão para a diferença é que o shell principal assumirá o comando como concluído quando o EOF for alcançado, enquanto o cmd no final do pipe espera linhas completas. Se você quiser uma explicação de por que isso deveria acontecer, você terá que perguntar à Microsoft.
(A propósito, sua descrição se refere a fileX , não fileX.cmd , e você diz que contém uma única linha, enquanto eu suspeito que ela contém uma linha incompleta.)