为什么我不能将 'where' 输出批量传输到 'type'?

Why can't I pipe 'where' output to 'type' in batch?

我正在尝试打印存在于我的路径中的批处理文件的内容。

我可以通过 'where' 找到文件:

> where myscript
C:\scripts\myscript.bat

我可以用'type'显示文件内容:

> 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.

根据我所做的一些测试,似乎 'where' 输出无法通过管道输出并且 'type' 输入无法通过管道输入。

任何人都可以解释为什么这不起作用吗?

P.S。我能够在 Powershell 中做到这一点:Get-Command myscript | Get-Content.

正如@Luaan 在评论中所说,type 将只接受文件名作为参数,而不是通过其输入通道。因此,在您的情况下,管道不会起作用。您必须使用另一种方式将 where 命令的结果作为参数给出。幸运的是 for /f 可以帮助您处理其他命令的输出。要打印与 where 命令输出相对应的文件,您必须在命令行上使用它:

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

在 batch-file 中你必须使用

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

正如 Luaan 和 J.Baoby 所揭示的那样,并非所有命令都可以从管道或重定向中检索其参数,但其中一些可以。

当然不是确切的输出,但可能是命令行中更接近的语法

where myScript | findstr /f:/ "^"

where 命令的输出通过管道传输到 findstr/f 开关用于指示要搜索的文件列表,斜杠表示将从标准输入读取该列表。 "^" 只是一个正则表达式,它将匹配 where comamnd

枚举的文件中的所有行