Вы должны помнить, что конвейер принимает выходные данные первой части команды и передает их следующей команде.
Давайте возьмем fileX.cmd | cmd и разбить его:
filex.cmd = @echo dir
Если мы введем @echo dir из командной строки, мы увидим вывод как dir . Echo просто выводит то, что приходит после команды echo. Вывод не выполняется, только отображается.
набрав filex.cmd из командной строки и Нажатие Enter дает нам выход dir Это ничем не отличается от предыдущего оператора, просто команда находится в файле batch/cmd.
Если мы добавим | cmd , то результаты, которые мы видим, отличаются, мы получаем список каталогов. Зачем? Поскольку выходной файл filex.cmd имеет значение dir и мы передаем dir в командную строку, которая принимает эти выходные данные и выполняет их, предоставляя нам список каталогов.
Так почему же вторая команда не делает то же самое? Причина в том, что вы используете команду type . Type отображает текст на экране. Если ваш список каталогов короткий, он бы сработал. Однако ваш список каталогов прокручивается за пределы экрана, поэтому команда type приостанавливает вывод и спрашивает, хотите ли вы more? , Этот вопрос more? Теперь вывод и передача в командную строку.
Обратите внимание, что если ваш список каталогов будет короче, type не будет запрашивать больше, и команда сработает так, как вы ожидали. Попробуйте те же команды в каталоге, который содержит только несколько каталогов и файлов, и вы увидите разницу.