2017-02-01 3 views
0

私のパスに存在するバッチファイルの内容を印刷しようとしています。なぜ出力を 'タイプ'にバッチでパイプできないのですか?

私は「」を持つファイルを見つけることができます。

 
> where myscript 
C:\scripts\myscript.bat 

を私は「タイプ」で、ファイルの内容を表示することができます:私は怠け者になりたい場合は、しかし、

 
> type C:\scripts\myscript.bat 
echo This is my script. There are many like it, but this one is mine. 

と単一のコマンドを使用します。私はいくつかのテストに基づいて

 
> where myscript | type 
The syntax of the command is incorrect. 

、それはどこの出力が出てパイプすることはできませんし、「type」を入力することができそうです

これはなぜこのように動作しないのか説明できる人はいますか?

P.S.私はPowershellでこれを行うことができました:Get-Command myscript | Get-Content

+0

ファイル名は 'type'の引数であり、標準入力からは出ません。配管は、標準入力を他の標準出力に接続します。 – Luaan

+0

変数は 'type'にデータを渡す唯一の方法ですか? –

+0

確かに分かりませんが、確かにオプションです。パイプセットされた入力に基づいて変数を設定するには、 'set'を使うことができます。あなたはおそらくここでスタックオーバーフローよりもスーパーユーザーの方が良い答えを得るでしょう:) – Luaan

答えて

2

@Luaanがコメント内で述べたように、typeは入力チャネルではなく引数としてファイル名を受け入れます。だからあなたのケースでは配管はそのトリックをしません。 whereコマンドの結果に引数として別の方法を使用する必要があります。幸いにもfor /fは他のコマンドの出力を処理するのに役立ちます。あなたがしたよう

@echo off 
FOR /F "delims=" %%G IN ('where myscript') DO type "%%G" 
+1

私が探していたものです。あなたと@ Luaanのおかげであなたの説明に感謝します。 –

2

を使用する必要があります

FOR /F "delims=" %G IN ('where myscript') DO type "%G" 

バッチファイルで:whereコマンドの出力に対応したファイルを印刷するには、コマンドラインでこれを使用する必要がありますLuaanとJ.Baobyによって公開されていますが、すべてのコマンドがパイプやリダイレクトから引数を取得できるわけではありませんが、その一部は可能です。

正確な出力、おそらくwhereコマンドの出力はfindstrにパイプされ

where myScript | findstr /f:/ "^" 

コマンドラインに近い構文確かではありません。 /fスイッチは、検索するファイルのリストを示すために使用され、スラッシュは、リストが標準入力から読み込まれることを意味します。 "^"は、wherecomamndによって列挙されたファイルのすべての行に一致する単なる正規表現です。

関連する問題