真实 Windows 相当于 cat *stdin*

真实 Windows 相当于 cat *stdin*

在 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 tempUnix 或& typeWindows 上同样好地进行测试,除非程序是交互式的,并且我需要在输入下一个输入之前查看一个输出。

答案2

TLDR:findstr "^" > STDIN.txt因为 .bat 中的第一行将整齐地捕获所有管道输入以供稍后使用。

我发现批处理文件中的第一行/命令/程序获取了 STDIN,因此我采取了以下方法:

  1. 捕获 STDIN 到文件STDIN.txt
  2. 编写 .bat 逻辑代码
  3. 使用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

与 *nix 最接近的 Windows 版本cat是个TYPE命令。请注意,在 *nix 系统上,cat实际上是一个单独的程序,而 WindowsTYPE实际上是命令行解释器的一部分。

答案4

ECHO 的工作方式应与 CAT 类似。

将文本回显到文件中

一般语法是

Echo This is some Text > FileName.txt

或者如果你想避免多余的空格:Echo Some more text>FileName.txt

相关内容