我正在尝试打印路径中存在的批处理文件的内容。
我可以找到带'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.
基于我所做的一些测试,似乎“输出”无法输出,输入的“类型”无法输入。
任何人都可以解释为什么这不起作用吗?
P.S。我能够在Powershell中做到这一点:Get-Command myscript | Get-Content
。
答案 0 :(得分:2)
正如@Luaan在评论中所说,type
只接受文件名作为参数,而不是通过其输入通道。在你的情况下,管道不会起作用。您将不得不使用另一种方式将where
命令的结果作为参数。幸运的是for /f
可以帮助您处理其他命令的输出。要打印与where
命令输出相对应的文件,您必须在命令行中使用它:
FOR /F "delims=" %G IN ('where myscript') DO type "%G"
在批处理文件中,您必须使用
@echo off
FOR /F "delims=" %%G IN ('where myscript') DO type "%%G"
答案 1 :(得分:2)
由Luaan和J.Baoby公开,并非所有命令都可以从管道或重定向中检索其参数,但其中一些命令可以。
当然不是确切的输出,但可能是命令行中更接近的语法
Path.Combine(Path1, Path2, Path3, ...)
Path.Combine("C:\", "Foo") 'Results in: C:\Foo
Path.Combine("C:\", "Foo", "Bar", "Hello World.txt") 'Results in: C:\Foo\Bar\Hello World.txt
where myScript | findstr /f:/ "^"
命令的输出通过管道传输到where
。 findstr
开关用于指示要搜索的文件列表,斜杠表示列表将从标准输入中读取。 /f
只是一个正则表达式,它将匹配"^"
comamnd枚举的文件中的所有行