Я хочу использовать каналы для перенаправления вывода одной программы в другую, как:

type file.txt file2.txt | sort | someprog

Теперь у меня проблема в том, что someprog не может использовать переданный по каналу STDOUT и хочет указать параметр файла:

someprog somefile.txt

Как я могу сказать someprog использовать STDOUT по каналу ? В bash (Linux) я использовал бы команду наподобие someprog - но, похоже, это не работает в cmd.

Создание временного файла для этого, к сожалению, не вариант для меня.

2 ответа2

0

Перенаправление ссылок

commandA & commandB Запустите команду A, а затем выполните команду B

commandA && commandB Запустить commandA, если это удастся, запустить commandB

Попробуйте следующее:

type file.txt file2.txt | sort > mytempfile && someprog mytempfile && del mytempfile
0

Процедура :unique возвращает временное имя файла с кратковременной даты и времени. Точность времени составляет примерно 3 миллисекунды, вероятность столкновения очень близка к нулю.

@echo off
set "somefile="

call :unique somefile
rem echo %somefile%

type file.txt file2.txt 2>NUL | sort > "%tmp%\%somefile%.txt"
someprog "%tmp%\%somefile%.txt"
erase "%tmp%\%somefile%.txt"
goto :eof

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:unique
@SETLOCAL enableextensions enabledelayedexpansion
  set "unq="
  for /F %%G in ('WMIC OS GET localdatetime^|findstr /I /V "local"') do (
    set "unq=%%G")
  set "unq=%unq:.=%"
  set "unq=%unq:+=%"
@ENDLOCAL &set "%1=%unq%"
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .