重定向两个命令的输出

时间:2018-05-23 23:17:20

标签: windows cmd

我想知道是否有单行代码在Windows上执行以下操作:

myCommand options1 | cut -c 10-20 > temp1.txt
myCommand options2 | cut -c 10-20 > temp2.txt
paste temp1.txt temp2.txt

我也希望使用diff代替paste来做类似的事情,但我猜测答案是否相同(是吗?)。通常,temp1和2都有多行文本。我发现以下看起来像一个类似的问题 Print output of two commands in two columns in excel file 但那没有答案。

编辑/更新:我现在意识到我并不十分清楚“单线”#。显然,我可以将所有三条线放在一条线上,只需用&符号分隔即可。那不是我想要的。我模糊地回忆起多年前使用Unix时反引号可以用于这样的事情。也许像是

paste `cmd1` `cmd2`

不太确定(?)。这就是我正在寻找的东西(在Windows上)。理想情况下,与简单地输入上面的三行相比,它不会涉及(更多)打字。这存在吗?

1 个答案:

答案 0 :(得分:1)

我永远不会理解为什么要使用单行,但是你走了:

(ping localhost |find "Mini" & ipconfig |find "IPv4")>temp.txt

编辑以并排显示两个命令的输出:

@echo off
setlocal enabledelayedexpansion
ping localhost |find "TTL" >1.txt
ipconfig |find ":" >2.txt

<1.txt (
  for /f "delims=" %%a in (2.txt) do (
    set /p "x="
    echo !x! ; %%a
    set "x=-"
  )
)>temp1.txt

与单行(与批处理文件)相同:

cmd /v:on /c ping localhost |find "TTL" >1.txt & ipconfig |find ":" >2.txt & <1.txt (for /f "delims=" %%a in (2.txt) do (set /p "x=" & echo !x! ; %%a &  set "x=-"))>temp2.txt

在命令行上使用的单行程序:

cmd /v:on /c "ping localhost |find "TTL" >1.txt & ipconfig |find ":" >2.txt & <1.txt (for /f "delims=" %a in (2.txt) do @(set /p "x=" & echo !x! ; %a &  set "x=-"))>temp.txt"

注意:在结果中,行数与2.txt中的行数一样多(第二个命令的输出)。如果1.txt有更多行,则省略它们(较少的行不是问题)