Windows cmd pass output of one command as paramete

2020-03-01 17:41发布

问题:

In linux it is possible t do this:

git diff $(git status -s -b | sed -n '2p' | cut -d' ' -f2-)

or a simpler case

ls $(pwd) 

The question is how can I achieve the same in windows? (not using a batch file, a one liner in command prompt). Not all commands support piping so how can we evaluate one and pass result as parameter to another?

I've tried piping and < and > but none work.

git diff < (git status -s -b | sed -n '2p' | cut -d' ' -f2-) 

Try that yourself it expects a file. And | doesn't work either as git diff doesn't support it

git status -s -b | sed -n '2p' | cut -d' ' -f2- | git diff // results in illegal seek

回答1:

There is no $ operator in cmd.
Redirection operators (<, >, >>) expect files or stream handles.
A pipe | passes the standard output of a command into the standard input of another one.

A for /F loop however is capable of capturing the output of a command and providing it in a variable reference (%A in the example); see the following code:

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