在 cmd 中使用管道输出作为文件名

在 cmd 中使用管道输出作为文件名

我想使用管道将一个程序的输出重定向到另一个程序,例如:

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

相关内容