Показать полную графическую версию : [решено] Проблемы с конвейером
Создаем простой bat файл
dir >a.txt
Запускаем.
На экране расшифрованная команда dir 1>a.txt
Откуда взялась эта 1?
Проблема повторяется на разных машинах, Win 8 и Win 10
Dir >a.txt>b.txt
превращается в dir 1>b.txt
Поясните, откуда эта 1 и как с ней бороться.
Georges, а если пробел после dir убрать, как это должно быть?
megaloman
16-02-2019, 14:55
Georges, 1 это стандартный выходной поток STDOUT. По умолчанию вывод на консоль.
2 поток STDERR для вывода ошибок.
Вы перенаправляете вывод стандартного потока с консоли на файл.
Бороться с этим не имеет смысла и невозможно.а если пробел после dir убрать, как это должно быть? »Не совсем понял, но пробел не при чем.Проблемы с конвейером »Да и не конвейер это, а перенаправление вывода.
Я не понимаю, как работает конструкция Dir >a.txt>b.txt. Задумано как одновременный вывод команды в 2 файла? Невозможно, ИМХО.
Запускаем.
На экране расшифрованная команда dir 1>a.txt
Откуда взялась эта 1?
Проблема повторяется на разных машинах, Win 8 и Win 10
…
Поясните, откуда эта 1 и как с ней бороться.»
Это не проблема. Так и должно быть. «1» — номер одного из стандартных потоков, в данном случае — стандартного потока вывода, stdout. «Бороться» с ней не надо никак.
Update: Припоздал.
Это не проблема. Так и должно быть. «1» — номер одного из стандартных потоков, в данном случае — стандартного потока вывода, stdout. «Бороться» с ней не надо никак. »
То есть она на команду не влияет, а просто отображается?
Я не понимаю, как работает конструкция Dir >a.txt>b.txt. Задумано как одновременный вывод команды в 2 файла? Невозможно, ИМХО. »
Это условные примеры, тестировалось, когда возникает и когда не возникает эта единица. Одним из примеров был не менее абсурдный type >a.txt Рабочая гипотеза была в том, что cmd зачем-то заменяет > на 1>. Пример с Dir >a.txt>b.txt был направлен на то, чтобы выяснить, первая или вторая угловая скобка дополняется единицей. Тем не менее, результат тоже озадачил :) Сразу вспомнились Стругацкие с семиногим буридановым бараном без мозжечка.
одновременный вывод команды в 2 файла? »
даже двух разных
@echo off
>"1.txt" (>"2.txt" dir a|dir b)
pause
То есть она на команду не влияет, а просто отображается? »
Она там подразумевается. То есть, если Вы не указали, опустили единицу при написании кода (а так все, как правило и делают), то она там неявно всё равно присутствует, что и отображается эхом при исполнении команды.
даже двух разных »
alpap, имелась в виду невозможность одновременного перенаправления вывода одной команды в два файла зараз (без использования сторонних средств, наподобие tee.exe и т.п.).
одновременного перенаправления »
я так понял что имеется ввиду ИМЕННО конкретно одной написанной команды, потому как ее можно написать три раза и расхождения по времени при выводе одной и той же команды в три разных файла я не вижу
>"3.txt" (>"2.txt" (>"1.txt" (dir& echo %time%)|(dir& echo %time%))|(dir& echo %time%))
alpap, так-то да. Но если это какая-нибудь получасовая обработка видео?! Мы же не будем её гонять из-за этого три раза, да и не всегда возможно сие будет — если исходные данные одновременно являются и результирующими.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.