Win7コマンドラインパイピング


0

私はなぜコマンドラインプロンプトでこれが起こるのか知りたいのです。

スクリプトがあります fileX.cmd これは1行のテキストです。

@echo dir

私が行った場合

C:\Users\Dogfood>fileX.cmd | cmd

これはディレクトリ内のすべてのファイルを表示しますが...

C:\Users\Dogfood>type fileX.cmd | cmd

ではない。コマンドプロンプトは新しいcmdを開きますが、私に尋ねます More?

なぜfileX.cmdの内容がパイプの右側のcmdにパイプされていないのですか? 最初の行と同じように? (すなわち fileX.cmd | cmd

回答:


0

cmdへのパイプ | cmd 入力ストリーム内の任意のコマンドを実行します。

  • 最初の場合、入力ストリームはの出力を含みます。 fileX.cmdすなわち dirこれが | cmd 実行します。
  • 後者の場合、入力ストリームには @echo dirだから、あなただけのテキストが表示されるはずです dir

私は More? コマンドの最後に改行がない場合 fileX.cmd。違いの理由は、EOFに達したときにプライマリシェルがコマンドをcompleteとして受け取るのに対して、パイプの最後のcmdは完全な行を想定しているためです。これがなぜあるべきかの説明が欲しいなら、あなたはマイクロソフトに尋ねなければならないでしょう。

(ところで、あなたの説明は fileXではない fileX.cmdそして、あなたはそれが単一行を含んでいると言いますが、私はそれが不完全な行を含んでいるのではないかと思います。)


とても良いAFH。私はついにストレートになった!
Dogfood

-1

あなたは配管がかかることを覚えておく必要があります 出力 コマンドの最初の部分を削除し、それを次のコマンドに渡します。

取ることができます fileX.cmd | cmd そしてそれを分解する:

filex.cmd = @echo dir

コマンドラインから@echo dirと入力すると、出力は次のようになります。 dir。 Echoは単にechoコマンドの後に来るものを出力します。出力は実行されず、表示されるだけです。

コマンドプロンプトからfilex.cmdと入力してEnterキーを押すと、出力が表示されます。 dir。これは、コマンドがbatch / cmdファイルに入っているという点で、前のステートメントと同じです。

追加すると | cmd結果が違うと、ディレクトリのリストが表示されます。どうして? filex.cmdの出力は dir そして私達は通り過ぎている dir その出力を受け取って実行するコマンドプロンプトに、ディレクトリの一覧を表示します。

では、なぜ2番目のコマンドが同じことをしないのでしょうか。その理由は、あなたは type コマンド。 Type テキストを画面に表示します。あなたのディレクトリリストが短いなら、それはうまくいったでしょう。ただし、ディレクトリリストは画面外にスクロールするため、 type コマンドは出力を一時停止し、必要かどうかを尋ねます more?。その質問、 more? これが出力となり、コマンドプロンプトに渡されます。

ディレクトリリストがもっと短い場合は、 type これ以上要求しないで、コマンドはどのように機能したでしょう 君は それを期待していただろう。いくつかのディレクトリとファイルだけが含まれているディレクトリで同じコマンドを試すと、違いがわかります。


そのため、プロンプトまたはcmd fileXの直後にfileX.cmdを使用すると、単純にエコーが実行され、「dir」が表示されます。それからそれはパイプで送られ、ファイルが出てきます。タイプfileXまたはタイプfileX.cmdは内容を表示し、しません。エコー。 "echo dir"はパイプを通過して "dir"になります。私が今持っている解決策は、使用することです。 cmd | cmd
Dogfood

1
それはどこではありません More? から来ている: type ディレクトリリストの前に置きます。私の答えを見てください。
AFH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.