Вы должны помнить, что конвейер принимает выходные данные первой части команды и передает их следующей команде.
Давайте возьмем 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
не будет запрашивать больше, и команда сработает так, как вы ожидали. Попробуйте те же команды в каталоге, который содержит только несколько каталогов и файлов, и вы увидите разницу.