我想使用管道将一个程序的输出重定向到另一个程序,例如:
type file.txt file2.txt | sort | someprog
现在我遇到的问题someprog
是无法使用管道 STDOUT 并且需要一个文件参数:
someprog somefile.txt
我如何知道someprog
要使用管道 STDOUT?在 bash (Linux) 中,我会使用类似的命令,someprog -
但这似乎在 cmd 中不起作用。
不幸的是,为此创建临时文件对我来说不是一个选择。
答案1
程序: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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
答案2
参考重定向
commandA & commandB
运行命令A,然后运行命令B
commandA && commandB
运行命令A,如果成功则运行命令B
请尝试以下操作:
type file.txt file2.txt | sort > mytempfile && someprog mytempfile && del mytempfile