在 Windows下cmd
是否有与 posix 命令等效的命令cat
?
cat 本身没有文件名,没有开关。我只想要一个将 stdin 复制到 stdout 直到到达 EOF 的东西。
这不是一个难以编写的程序,但是 Windows 是否提供了这样的程序?
答案不一定是一个单词,而且肯定不是类型。
echo test | type
只是收到一条错误消息
echo test | type con
挂起等待我输入一些内容
echo test | more
很接近,但是“更多”在一个屏幕之后停止了。
我想要这个的原因是为了运行一个程序,当 stdout 进入管道时,该程序的行为会有所不同。这样我就可以看到输出。
答案1
someprog | findstr x*
或任何其他单个字符后跟星号会将所有行从管道 stdin 复制到 stdout。具体来说,它会复制每一行,无论它包含x
或不包含,您很容易就能看出这始终是正确的。Windowsfindstr
大致相当于 Unix,grep
但在语法上存在令人讨厌的细微差异。
findstr
适用于文本,我不确定(也没有测试)它是否适用于几乎没有 [CR]LF 的二进制数据,因此行数非常长。cat
没有参数的 Unix 适用于二进制,但您所述的用例是程序会改变其管道输出,根据我的经验,这只会发生在文本输出上 - 通常不是管道,而是非 tty/非控制台/等,因此我可以在someprog >temp; cat temp
Unix 或& type
Windows 上同样好地进行测试,除非程序是交互式的,并且我需要在输入下一个输入之前查看一个输出。
答案2
TLDR:findstr "^" > STDIN.txt
因为 .bat 中的第一行将整齐地捕获所有管道输入以供稍后使用。
我发现批处理文件中的第一行/命令/程序获取了 STDIN,因此我采取了以下方法:
- 捕获 STDIN 到文件
STDIN.txt
- 编写 .bat 逻辑代码
- 使用
TYPE STDIN.txt
访问或将您的 STDIN 传输到其他程序
例子:
fawk.bat:
@ECHO OFF
:: Capture STDIN initially as the first line of our .bat
FINDSTR "^" > STDIN.txt
:: Do some other stuff here
:: Pipe STDIN on to our program here (e.g. find all .txt files)
TYPE STDIN.txt | AWK /\.txt$/
:: Cleanup
DEL /Q STDIN.txt
用法:
C:>DIR /b | fawk.bat
a.txt
file.txt
README.txt
答案3
答案4
ECHO 的工作方式应与 CAT 类似。
将文本回显到文件中
一般语法是
Echo This is some Text > FileName.txt
或者如果你想避免多余的空格:Echo Some more text>FileName.txt