Windows cmd将一个命令的输出作为参数传递给另一个命令

Ari*_*oon 7 windows shell cmd pipe command-prompt

在linux中,有可能这样做:

git diff $(git status -s -b | sed -n '2p' | cut -d' ' -f2-)
Run Code Online (Sandbox Code Playgroud)

或者更简单的情况

ls $(pwd) 
Run Code Online (Sandbox Code Playgroud)

问题是如何在Windows中实现相同的目标?(不使用批处理文件,在命令提示符中使用单行程序).并非所有命令都支持管道,那么我们如何评估一个并将结果作为参数传递给另一个?

我尝试过管道<,>但没有工作.

git diff < (git status -s -b | sed -n '2p' | cut -d' ' -f2-) 
Run Code Online (Sandbox Code Playgroud)

自己尝试一下它需要一个文件.并且|不起作用,因为git diff不支持它

git status -s -b | sed -n '2p' | cut -d' ' -f2- | git diff // results in illegal seek
Run Code Online (Sandbox Code Playgroud)

asc*_*pfl 14

没有$操作员cmd.
重定向操作符(<,>,>>)预计文件或流句柄.
管道|将命令的标准输出传递到另一个命令的标准输入.

for /F然而是能够捕获命令的输出和在可变参考提供它(的%A在本例中); 请参阅以下代码:

for /F "usebackq delims=" %A in (`git status -s -b ^| sed -n '2p' ^| cut -d' ' -f2-`) do git diff %A
Run Code Online (Sandbox Code Playgroud)

  • @PatrickMichaelsen 我只是在 3 行 BASH 脚本上花了大约一个小时的时间,因为(1)“alias”在 shell 脚本中不起作用,(2)如果您使用“var”将命令的输出分配给变量=$(cmd)` 并且该输出中包含 JSON,然后 JSON 就会被破坏。那么也许我们可以同意 BASH 和 WINBAT 都很糟糕?:) (4认同)
  • 一切在Linux中是如此简单 (3认同)