Bashを使用する場合、次のように1つのコマンドの出力を別のコマンドに入れることができます。
my_command `echo Test`
と同じものになります
my_command Test
(明らかに、これは非実用的な例にすぎません。)
Batchで同じことができるかどうか疑問に思っています。
Bashを使用する場合、次のように1つのコマンドの出力を別のコマンドに入れることができます。
my_command `echo Test`
と同じものになります
my_command Test
(明らかに、これは非実用的な例にすぎません。)
Batchで同じことができるかどうか疑問に思っています。
回答:
最初に出力をファイルにリダイレクトすることでそれを行うことができます。例えば:
echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
for /f
バリアントははるかに優れています。
%random%
for /f
次のコマンドでcmd.exeスクリプトを使用して、同様の機能を取得できます。
for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a
ええ、それは(控えめに言っても)ちょっと自明ではありませんが、そこにあるものです。
for /?
悲惨な詳細については、を参照してください。
追記:私は「使用することを考えたecho
」のバッククォートの内側に「for /f
」コマンド「が使用して行われる必要があるcmd.exe /c echo Test
ため、」echo
内部コマンドであるcmd.exe
が、それは、より自然な方法で動作します。Windowsバッチスクリプトは常に何らかの形で私を驚かせます(ただし、通常は良い方法ではありません)。
system()
つまり、C は問題ありませんでした。iircは、シェルをProcess.Start
起動しますが、.NET は明示的にシェルを呼び出す必要があるためです。そのようなもの、iirc。いずれにせよ、これは受け入れられた答えよりも良い答えだと思います:-)
for
害はしないが問題を混乱させるオプション。これはどうですか:for /f %%a in ('"echo Test"') do my_command %%a
tokens=*
重要です。それ以外の場合、コマンドの結果にスペースが含まれていると、最初の単語のみが出力されます。これをプロンプトで実行しますfor /f %a in ('"echo foo bar"') do echo "%a"
。印刷されます"foo"
。
「for」コマンドのドキュメントを読みます。 for /?
悲しいことに、私は自分で確認するためにWindowsにログインしていませんが、このようなものがあなたが望むものに近づくことができると思います:
for /F %i in ('echo Test') do my_command %i
多分私は標準的なfor /f
方法の構文を台無しにしていますが、&&と|を含む非常に複雑なコマンドを入力すると の制限内のバックティック内ではfor /f
、問題が発生します。任意の複雑さのコマンドを処理するために、通常からのわずかな変更が可能です。
SET VV=some_command -many -arguments && another_command -requiring -the-other -command | handling_of_output | more_handling
for /f "usebackq tokens=*" %%a in (`%VV%`) do mycommand %%a
最初に完全で複雑なコマンドを変数に入れ、次に複雑なコマンドをforループの制限に直接置くのではなく、変数への参照を制限に入れることで、構文解釈の問題を回避できます。現在、VV
上記の例で変数に設定した正確なコマンドをそれが使用される場所にコピーする%VV%
と、構文エラーが発生します。