Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблемы с конвейером (http://forum.oszone.net/showthread.php?t=339260)

Georges 16-02-2019 13:06 2858250

Проблемы с конвейером
 
Создаем простой bat файл
dir >a.txt

Запускаем.
На экране расшифрованная команда dir 1>a.txt

Откуда взялась эта 1?
Проблема повторяется на разных машинах, Win 8 и Win 10

Dir >a.txt>b.txt
превращается в dir 1>b.txt

Поясните, откуда эта 1 и как с ней бороться.

mwz 16-02-2019 13:56 2858264

Georges, а если пробел после dir убрать, как это должно быть?

megaloman 16-02-2019 14:55 2858288

Georges, 1 это стандартный выходной поток STDOUT. По умолчанию вывод на консоль.
2 поток STDERR для вывода ошибок.
Вы перенаправляете вывод стандартного потока с консоли на файл.
Бороться с этим не имеет смысла и невозможно.
Цитата:

Цитата mwz
а если пробел после dir убрать, как это должно быть? »

Не совсем понял, но пробел не при чем.
Цитата:

Цитата Georges
Проблемы с конвейером »

Да и не конвейер это, а перенаправление вывода.
Я не понимаю, как работает конструкция Dir >a.txt>b.txt. Задумано как одновременный вывод команды в 2 файла? Невозможно, ИМХО.

Iska 16-02-2019 15:21 2858295

Цитата:

Цитата Georges
Запускаем.
На экране расшифрованная команда dir 1>a.txt
Откуда взялась эта 1?
Проблема повторяется на разных машинах, Win 8 и Win 10

Поясните, откуда эта 1 и как с ней бороться.»

Это не проблема. Так и должно быть. «1» — номер одного из стандартных потоков, в данном случае — стандартного потока вывода, stdout. «Бороться» с ней не надо никак.

Update: Припоздал.

Georges 16-02-2019 17:20 2858310

Цитата:

Цитата Iska
Это не проблема. Так и должно быть. «1» — номер одного из стандартных потоков, в данном случае — стандартного потока вывода, stdout. «Бороться» с ней не надо никак. »

То есть она на команду не влияет, а просто отображается?

Цитата:

Цитата megaloman
Я не понимаю, как работает конструкция Dir >a.txt>b.txt. Задумано как одновременный вывод команды в 2 файла? Невозможно, ИМХО. »

Это условные примеры, тестировалось, когда возникает и когда не возникает эта единица. Одним из примеров был не менее абсурдный type >a.txt Рабочая гипотеза была в том, что cmd зачем-то заменяет > на 1>. Пример с Dir >a.txt>b.txt был направлен на то, чтобы выяснить, первая или вторая угловая скобка дополняется единицей. Тем не менее, результат тоже озадачил :) Сразу вспомнились Стругацкие с семиногим буридановым бараном без мозжечка.

alpap 16-02-2019 18:29 2858314

Цитата:

Цитата megaloman
одновременный вывод команды в 2 файла? »

даже двух разных
Код:

@echo off
>"1.txt" (>"2.txt" dir a|dir b)
pause


Iska 16-02-2019 19:03 2858317

Цитата:

Цитата Georges
То есть она на команду не влияет, а просто отображается? »

Она там подразумевается. То есть, если Вы не указали, опустили единицу при написании кода (а так все, как правило и делают), то она там неявно всё равно присутствует, что и отображается эхом при исполнении команды.

Цитата:

Цитата alpap
даже двух разных »

alpap, имелась в виду невозможность одновременного перенаправления вывода одной команды в два файла зараз (без использования сторонних средств, наподобие tee.exe и т.п.).

alpap 17-02-2019 03:46 2858362

Цитата:

Цитата Iska
одновременного перенаправления »

я так понял что имеется ввиду ИМЕННО конкретно одной написанной команды, потому как ее можно написать три раза и расхождения по времени при выводе одной и той же команды в три разных файла я не вижу
Код:

>"3.txt" (>"2.txt" (>"1.txt" (dir& echo %time%)|(dir& echo %time%))|(dir& echo %time%))

Iska 17-02-2019 11:09 2858386

alpap, так-то да. Но если это какая-нибудь получасовая обработка видео?! Мы же не будем её гонять из-за этого три раза, да и не всегда возможно сие будет — если исходные данные одновременно являются и результирующими.

alpap 17-02-2019 20:48 2858475

Iska, так понятнее.


Время: 00:30.

Время: 00:30.
© OSzone.net 2001-