web-dev-qa-db-ja.com

Windows cmdは、あるコマンドの出力をパラメーターとして別のコマンドに渡します

Linuxではこれを行うことが可能です:

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

またはより単純なケース

ls $(pwd) 

問題は、Windowsで同じようにするにはどうすればよいですか? (バッチファイルを使用せず、コマンドプロンプトの1つのライナー)。すべてのコマンドがパイピングをサポートしているわけではないので、どのようにして1つを評価し、結果をパラメーターとして別のパラメーターに渡すことができますか?

パイピングと<>を試してみましたが、何も動作しません。

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

ファイルを期待していることを自分で試してください。また、|git diffがサポートしていないため、どちらも機能しません。

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

cmdには$演算子はありません。
リダイレクト演算子(<>>>)は、ファイルまたはストリームハンドルを予期します。
パイプ|は、コマンドの標準出力を別のコマンドの標準入力に渡します。

A for /F loop は、コマンドの出力をキャプチャして変数参照(例では%A)で提供できます。次のコードを参照してください。

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