为什么我不能将 '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
枚举的文件中的所有行
我正在尝试打印存在于我的路径中的批处理文件的内容。
我可以通过 '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